调用时 Javascript 代码不可用

标签 javascript jquery ajax asynchronous

Possible Duplicate:
jQuery AJAX: return value on success

当我尝试通过查询获取 JSON 文件时,遇到了这个奇怪的引用问题:

    var themeData;
    $.getJSON("json/sample.js", function(data) {
                themeData = data.theme;
                        console.log(themeData.sample[0].description);
            }); 
   console.log(themeData.sample[0].description);

第一个 console.log 有效,第二个则无效。为什么会发生这种情况?

最佳答案

这是第二个没有被击中的(按代码中的时间顺序排列)。那是因为还没有设定。从服务器返回后,getJSON 内的回调被异步调用。

var themeData;

// FIRST -- themeData currently null
$.getJSON("json/sample.js", function(data) {

    // THIRD -- now themeData has a value, and gets logged
    themeData = data.theme;
    console.log(themeData.sample[0].description);
}); 

// SECOND -- themeData still null
console.log(themeData.sample[0].description);

如果您确实需要在getJSON“之后”调用方法,那么请接受回调的想法。使用类似这样的东西。

var themeData;
function myCallback(data) {
    console.log(data.sample[0].description);
}
$.getJSON("json/sample.js", function(data) {
    themeData = data.theme;
    console.log(themeData.sample[0].description);
    myCallback(themeData);
}); 

编辑

您还可以使用 JQuery ajax 函数的 async: false 来强制同步调用。

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback,
  async: false
});

关于调用时 Javascript 代码不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12701507/

相关文章:

jQuery - 单击函数内的多个语句

javascript - HTML Knockout 使用 Unicode 将 FontAwesome 图标添加到表格中

javascript - 即使表单无效, Bootstrap 模式也会加载?

javascript - 如何在 jQuery 中用开始和结束元素包装元素?

Javascript 局部静态变量

javascript - jQuery .each() 不更新

javascript - 在 ajax 调用的脚本中调用 ajax 未正确运行 (PHP)

javascript - JSON - 名为 '*' 星号的访问字段

javascript - Firefox 和 IE 之间 GeoRSS 叠加的加载时间不一致

javascript - 如何修复堆叠对数条形图值以适合网格