我正在从文件中获取数据,在这种情况下,它是/notes.html
。我正在尝试将ajax调用的结果存储在一个变量中,但是它始终返回未定义的值,但是当我在chrome开发人员工具中运行该函数时,它将返回/notes.html
的内容。这是我修改为记录数据的简单代码:
var ajax = {};
ajax.result = Array();
ajax.fetch = function(urls,datas){
$.ajax({
url: urls,
type: 'post',
data: datas,
success: function(data){
console.log (data);
}
});
}
ajax.fetch('/notes.html',{});
现在这就是我在说的。如果我们更改
console.log
并将其设置为return
,然后将其更改为console.log
ajax.fetch
调用,则将无法定义。当我将其保存在
ajax.result
中,然后在chrome dev中调用它时。工具,其内容显示在chrome dev中。工具,但我无法在基本javascript中使用它。页面为here。它是空白页,但是您可以在控制台中看到上面的代码所显示的内容。
最佳答案
ajax本质上是一个延迟调用,因此从该函数返回的内容并不重要,原始获取已退出并在不久前未定义返回...
您可以将回调传递给fetch来解决此问题:
var ajax = {};
var result;
ajax.result = Array();
ajax.fetch = function(urls,datas, callback){
return $.ajax({
url: urls,
type: 'post',
data: datas,
success: function(data){
callback(data);
}
});
}
ajax.fetch('/notes.html',{}, function (data) {
// execute result related code here to ensure variable already assigned
});
如果进行跟踪,将执行以下操作:
宣布ajax
结果被宣布
ajax设置为
{}
ajax.result设置为新数组(顺便说一句,您应该使用[]而不是Array以避免潜在的原型疯狂)
ajax.fetch设置为函数
调用ajax.fetch,并使用匿名函数作为回调
$ .ajax被称为
ajax.fetch返回(这是您未定义的来源,现在它将返回一个jQuery deferred object)
成功回调称为
传递的回调称为
成功回调返回(由于已在8中返回,因此无法捕获返回值)
done回调是代码(在这里,由于闭包,您可以使用获取的数据)