当谈到jQuery时,我是一个完全的菜鸟,但我正在努力学习。我在这里做错了什么?
function MakeCall(url) {
var result;
$.ajax({
url: url,
dataType: "text",
success: function(txt) {
result = txt;
return;
}
});
alert(result);
return result;
}
编辑:
好吧,对不起那点愚蠢......我已经修好了那一部分。现在我的问题是它现在的警报返回“未定义”,即使结果在成功函数中正确设置...非常感谢...
答案 0 :(得分:13)
result == txt;
应该是
result = txt;
你的第二个问题是ajax调用是异步的。即alert(result)语句可能会在成功回调函数之前执行。
您正在问如何防止这种情况发生。你不能。这不是一个错误。这就是AJAX所代表的。 如果你想在ajax调用之后执行某些操作,请将其添加到成功回调函数中。
修改
如果你真的需要在其他功能中处理结果,那么你可以这样做:
$.ajax({
url: url,
dataType: "text",
success: function(result) {
someOtherFunction(result)
return;
}
});
答案 1 :(得分:3)
我认为这是由于javascript服务器调用的异步性质:javascript在进行alert()调用之前不会等待响应
答案 2 :(得分:3)
道歉 - 我正在交叉发布问题的答案,只看到了这个人最初发布的另一个问题。
Jquery的ajax函数是异步的 - 因此在运行第二个警报后,成功函数将被称为。然后它将在ajax方法完成之前从函数返回。
如果您真的想以这种方式构建应用,可以在呼叫中添加 async 选项,将其设置为false。 (http://docs.jquery.com/Ajax/jQuery.ajax#options,请参阅第一个条目。)这将导致在$ .ajax方法返回之前调用success函数。
但是,建议不要阻止ajax调用,因为它会挂起脚本和浏览器。
因此,我建议您重新构建应用程序:
function MakeCall(url, callback) {
$.ajax({
url: url,
dataType: "text",
success: callback
});
}
MakeCall('http://theurl.com', function(txt) {
result = txt;
alert(result);
return;
});
答案 3 :(得分:2)
javascript中的赋值运算符=
result = txt;
答案 4 :(得分:2)
第二个返回undefined,因为没有任何内容分配给结果。正如其他人所说,
将其更改为
result= txt;
result == txt是一种比较方式,而不是分配
修改 -
第二个问题是因为javascript在发出警报之前不会等待ajax完成。 ajax中的A代表异步意味着其他东西不会等待ajax函数完成
答案 5 :(得分:2)
发生这种情况是因为在调度AJAX之后立即发生警报。 AJAX是异步的,因此仅仅调度请求不足以填充结果。
将消息框放入成功功能,或从成功功能中调用功能。
答案 6 :(得分:2)
当您发出警报时,ajax调用可能尚未返回?
尝试在成功函数中发出警告,以测试它是否正在返回。
答案 7 :(得分:1)
$ .ajax()函数默认是异步的(它是AJAX中的A),因此警报在AJAX回调函数完成之前发生。如果您需要函数来返回值,请使用async选项。
$.ajax({
async: false, // disable asynchronous ajax
url: url,
dataType: "text",
success: function(txt) {
result = txt;
return;
}
});
这会冻结浏览器直到函数完成,所以如果可以的话,最好让它以异步方式运行并在其他人提到的成功回调函数中使用结果。