这可能更像是一个范围界定问题。我正在尝试在 $.getJSON 函数中设置一个 JSON 对象,但我需要能够在回调之外使用该对象。
var jsonIssues = {}; // declare json variable
$.getJSON("url", function(data) {
jsonIssues = data.Issues;
});
// jsonIssues not accessible here
在另一篇文章中提出了一个类似的问题,共识是我需要对 JSON 对象做的任何事情都需要在回调函数中完成,并且不能在其他任何地方访问。我真的没有办法在 $.getJSON 回调之外继续访问/操作那个 JSON 对象吗?返回变量或设置全局变量怎么样?
我很感激任何帮助。这似乎不太对劲……
更新:
尝试将 $.ajax() 异步设置设置为 false,并运行相同的代码,但没有成功。我试过的代码如下:
var jsonIssues = {}; // declare json variable
$.ajax({ async: false });
$.getJSON("url", function(data) {
jsonIssues = data.Issues;
});
// jsonIssues still not accessible here
另外,我收到了一些回应,认为全局变量应该可以正常工作。我应该澄清一下,所有这些代码都在$(document).ready(function() {
. 要设置全局变量,我应该在 document.ready 之前声明它吗?像这样:
var jsonIssues = {};
$(document).ready(function() {
var jsonIssues = {}; // declare json variable
$.getJSON("url", function(data) {
jsonIssues = data.Issues;
});
// now accessible?
}
我的印象是,在 document.ready 中声明的变量应该可以在 document.ready 的任何部分“全局”访问和修改,包括像 $.getJSON 回调函数这样的子函数。我可能需要阅读 javascript 变量范围,但似乎并不容易实现我的目标。感谢所有的回应。
更新 #2: 根据对以下答案的评论,我确实使用了 $.ajax而不是.getJSON,并获得了我想要的结果。代码如下:
var jsonIssues = {};
$.ajax({
url: "url",
async: false,
dataType: 'json',
success: function(data) {
jsonIssues = data.Issues;
}
});
// jsonIssues accessible here -- good!!
对我的答案的一些后续评论(我很感激他们)。我这样做的目的是首先加载一个带有问题列表的 JSON 对象,然后用户可以从中删除并保存这些问题。但是,这是通过在页面上后续交互做,我不能预见用户将要使用JSON对象做内回调。因此需要在回调完成后使其可访问。有没有人看到我的逻辑有缺陷?说真的,因为可能有一些我没有看到的东西......
另外,我正在阅读 .ajax() jQuery 文档,它说将 async 设置为 false “同步加载数据。在请求处于活动状态时阻止浏览器。最好在需要同步时通过其他方式阻止用户交互.”
有谁知道在发生这种情况时我应该如何阻止用户交互?为什么会有这样的担忧?再次感谢所有的答复。