从本地文件到Web服务器进行ajax调用时,不可预测的javascript执行顺序

时间:2011-04-06 15:27:02

标签: javascript ajax cordova

在Mac OS X上的Safari 5和iOs设备上的Safari中测试:

如果ajax请求是从本地文件发送到远程服务器(例如,你可能想在手机应用程序中执行),那么在ajax响应中加载的Javascripts会以错误的顺序执行。

我创建了一些演示脚本,因为这很难解释:

http://test.jonasfischer.net/ajax/index.html(您需要将该文件存储在本地光盘上才能重现问题)

有谁知道为什么会发生这种情况以及如何确保正确的脚本执行顺序?

3 个答案:

答案 0 :(得分:1)

我认为需要以1,2,3顺序进行调用?你是异步调用服务器吗?如果是这样,我担心这是异步调用的本质;你无法保证他们将完成的订单。

一种解决方案是执行您提到的操作,或者另一种解决方案是同步调用Web服务器。

答案 1 :(得分:0)

可能的解决方案如下:使用Ajax调用发送索引,将该调用的结果(脚本+索引)存储在索引位置的数组中,如果所有ajax调用都已完成,则检查数组长度工作。如果是这样,请对数组进行aiterate并附加脚本。

答案 2 :(得分:0)

发生这种情况是因为您加载的HTML片段中的<script>标记是由浏览器运行;他们是由jQuery运行的。事实上,片段必须明确地针对<script>标签进行梳理。一旦将HTML片段的其余部分放入您定位的元素中,库(jQuery,即)就会将标记添加到文档中。因此,正常的顺序服从浏览器行为实际上与情况无关。

(好吧,它们最终由浏览器运行,但它的编排取决于jQuery,并且由于动态添加的<script>标签的语义,事情又变回异步。)