AJAX ASYNC False vs. True

我这里有一个测试网站(kdmalikdesign.com/test/rsd/index.html)。 我正在用它做一堆事情。 我主要担心的是现在它不起作用,除非ASYNC是假的,我听说这是不好的做法?

现在我已经确定了async是false的原因是因为当我触发成功回调时,xml数据没有被加载但是当我加载完成的回调时,一切都很好。 我不得不将其更改为async false以使其与成功回调一起正常工作。

有没有具体的方法来做这个? 基本上ajax调用正在做的是抓取一个xml文件并读取它,具体取决于使用特定数据填充页面的文件名。 我这样做基本上就像练习/练习一样。

卡门隆,谢谢你

运行同步调用通常是一种弊端,因为当您可能使用回调以异步方式执行相同操作时,您正在有效地运行请求,同时失去异步性的所有好处。

async:false将导致jQuery.ajax()调用阻塞,直到它返回。 实际上,在伪代码中,而不是:

 function ajax: perform request callback with results 

你这样做:

 function ajax: perform request while (no results) wait return results 

这完全阻止了其他任何事情的执行,直到结束……这非常可怕。 显而易见的用例是以waterfall模式运行东西: task 1 -> task 2 -> task 3 ,这可能发生。

如果您能够阻止浏览器,仍然可以考虑使用回调。 它们将允许您在处理内容时保持站点的其余部分活动。 您可以通过设置async:true并在下一步提供回调来轻松完成此操作。 但是,您最终可能会使用回调意大利面,如果您拥有它们,可能需要使用库来管理大型操作。

非常好的候选者来自Node.JS,称为async.js 。 它是MapReduce 工具,并实现waterfallparallel运行模型。

故事的士气 :async:false可以100%的时间被回调替换。

如果您想实现异步调用,那么您希望将所有要使用结果数据完成的逻辑组织到.succcess()回调中。

async为false的原因是因为当我触发成功回调时,没有加载xml数据但是当我加载完成的回调时,一切都很好。

您的问题中的那一行有点令人困惑,因为根据定义,一旦请求完成并且返回的任何数据可用,就会执行success callback

这是你不能用async: true做的一个例子async: true

 function ajaxrequest() { var someValue; $.get('serverFile.php', function(data){ someValue = data; }); return someValue; } 

在这种情况下,变量someValue在返回时将为空,因为您提供的回调不会与其余代码同步或内联执行。

要使用async:true您可以像这样组织代码:

 function getData() { return $.get('serverFile.php'); } function alertData() { getData().done(function(data){ alert(data); }); } function logData() { getData().done(function(data){ console.log(data); }); } 

我已经通过这种方式对其进行了分解,因此您可以看到隔离请求方法并让它们返回jQuery Deferred对象以便多个其他函数可以在需要时使用相同的请求。

async true与相同的请求位置使得它对于数据溢出至关重要,特别是在数据库查询中,如果请求是重复的,它会产生太多的连接问题

第二个到第n个请求将响应更长时间