繁体   English   中英

为什么此jQuery函数无法正常运行?

[英]Why won't this jQuery function perform properly?

当涉及到jQuery时,我是个菜鸟,但我想学习。 我在这里做错什么了?

function MakeCall(url) { 
var result;
$.ajax({
    url: url,
    dataType: "text",
    success: function(txt) {
        result = txt;
        return;
    }
});
alert(result);
return result;
}

编辑:

好的,为那愚蠢的事感到抱歉...我已经修复了那部分。 现在我的问题是,即使在成功函数中正确设置了结果,警报现在所处的位置也将返回“未定义” ...

非常感谢...

    result == txt;

应该

    result = txt;

您的第二个问题是ajax调用是异步的。 即alert(result)语句可能会在成功回调函数之前执行。

您在问如何防止这种情况。 你不能 这不是错误。 这就是AJAX代表的意思。 如果要在ajax调用后执行某些操作,请将其添加到成功回调函数中。

编辑

如果您确实需要在其他函数中处理结果,则可以执行以下操作:

$.ajax({
    url: url,
    dataType: "text",
    success: function(result) {
        someOtherFunction(result)
        return;
    }
});

我认为这是由于javascript服务器调用的异步特性引起的:javascript在继续进行alert()调用之前不会等待响应

抱歉-我正在交叉发布问题的答案,只看到了此人最初发布的其他问题。

jQuery的ajax函数是异步的-因此,将在运行第二个警报调用成功函数。 然后它将在ajax方法完成之前从函数返回。

如果您确实想以这种方式构建应用程序,则可以向该调用添加一个异步选项,将其设置为false。 http://docs.jquery.com/Ajax/jQuery.ajax#options ,请参阅第一个条目。)这将导致在$ .ajax方法返回之前调用成功函数。

但是,不建议阻塞ajax调用,因为它会挂起脚本和浏览器。

因此,我建议您以如下方式重组应用程序:

function MakeCall(url, callback) { 

$.ajax({
    url: url,
    dataType: "text",
    success: callback
});

}

MakeCall('http://theurl.com', function(txt) {
        result = txt;
        alert(result);
        return;
});

JavaScript中的赋值运算符为=

result = txt;

第二个返回undefined,因为没有分配任何结果 正如其他人所说,

更改为

 result= txt;

result == txt是一种比较而不是分配的方法

编辑-

第二个问题是因为javascript在发出警报之前不会等待ajax完成。 ajax中的A代表“ 异步”,这意味着其他事情将在不等待ajax函数完成的情况下运行

之所以发生这种情况,是因为警报是在派发AJAX之后立即发生的。 AJAX是异步的,因此仅调度请求不足以填充结果。

将消息框放在成功函数内,或从成功函数内调用函数。

发出警报时,也许ajax调用尚未返回?

尝试在成功函数中放置一个警报,以测试警报是否完全返回。

$ .ajax()函数默认情况下是异步的(在AJAX中为A),因此警报将在AJAX回调函数完成之前发生。 如果您需要函数返回值,请使用async选项。

$.ajax({
    async: false, // disable asynchronous ajax
    url: url,
    dataType: "text",
    success: function(txt) {
        result = txt;
        return;
    }
});

这将冻结浏览器,直到该功能完成为止,因此,如果可以的话,最好让它异步运行,并在其他人提到的成功回调函数中使用结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM