Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从本地文件到Web服务器进行ajax调用时,javascript执行顺序不可预测_Javascript_Ajax_Cordova - Fatal编程技术网

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

从本地文件到Web服务器进行ajax调用时,javascript执行顺序不可预测,javascript,ajax,cordova,Javascript,Ajax,Cordova,在Mac OS X上的Safari 5和iOs设备上的Safari中测试: 如果ajax请求是从本地文件向远程服务器发出的(例如,您可能希望在phonegap应用程序中执行),则ajax响应中加载的Java脚本将以错误的顺序执行 我创建了一些演示脚本,因为这很难解释: (您需要将该文件存储在本地光盘上以重现问题) 你们中有谁知道为什么会发生这种情况,以及如何确保正确的脚本执行顺序吗?我假设需要按照1、2、3的顺序进行调用?您正在异步调用服务器吗?如果是这样,恐怕这就是异步调用的本质;你不能保证他

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

如果ajax请求是从本地文件向远程服务器发出的(例如,您可能希望在phonegap应用程序中执行),则ajax响应中加载的Java脚本将以错误的顺序执行

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

(您需要将该文件存储在本地光盘上以重现问题)


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

我假设需要按照1、2、3的顺序进行调用?您正在异步调用服务器吗?如果是这样,恐怕这就是异步调用的本质;你不能保证他们会按什么顺序完成


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

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

这种情况发生在您身上,因为您加载的HTML片段中的
标记不是由浏览器运行的;它们由jQuery运行。事实上,片段必须被明确地梳理成
标记。库(即jQuery)在将HTML片段的其余部分拖放到目标元素中后,会将标记添加到文档中。正因为如此,遵守浏览器行为的正常顺序实际上与这种情况无关


(好吧,它们最终是由浏览器运行的,但它的编排取决于jQuery,而且由于动态添加的
标记的语义,事情又回到了异步状态。)

脚本(1、2、3)作为常规的ooh包含在内,我明白了。不幸的是,这超出了我的知识范围。我希望我没有浪费你的时间。祝你好运找到解决方案。好的,谢谢你(尽管这对我来说是个坏消息)。有没有一种简单的方法可以恢复对脚本执行顺序的控制?我尝试了jQuery1.5中引入的两个新Ajax选项,但没有成功:$.Ajax({async:false,crossDomain:true});据我所知,没有办法保存自己修改jQuery代码的代码。关于嵌入式脚本标记的行为几乎没有文档记录,更不用说通过任何类型的配置选项进行控制了。当然,您可以将脚本移到其他地方,也许可以移到主页面,在那里可以正常加载脚本。