我从文件中获取数据,在这种情况下它是/notes.html
。我试图将ajax调用的结果存储在一个变量中,但它一直返回undefined,但是当我在chrome developer工具中运行该函数时,它返回/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。它是一个空白页面,但您可以在控制台中看到它打印出的代码与上面的代码。
答案 0 :(得分:2)
ajax本质上是一个延迟调用,所以从函数返回的内容真的没关系,原来的fetch已经退出并且前一段时间返回undefined ...
你可以将回调传递给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
});
如果你进行追踪,你将得到以下执行:
{}
答案 1 :(得分:0)
对$ .ajax()的调用在发出请求后立即返回,因为默认情况下它以异步模式运行。 $ .ajax调用的返回值不是success函数的返回值。打开同步行为:
ajax.fetch = function(urls, datas)
{
result = null;
$.ajax({ url: urls,
type: 'post',
data: datas,
async: false,
success: function(data) { result = data; } });
return result;
}
或者只是这样做:
$.ajax({ url: urls,
type: 'post',
data: datas,
async: false }).responseText;