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