从本地文件到Web服务器进行ajax调用时,javascript执行顺序不可预测
在Mac OS X上的Safari 5和iOs设备上的Safari中测试: 如果ajax请求是从本地文件向远程服务器发出的(例如,您可能希望在phonegap应用程序中执行),则ajax响应中加载的Java脚本将以错误的顺序执行 我创建了一些演示脚本,因为这很难解释: (您需要将该文件存储在本地光盘上以重现问题)从本地文件到Web服务器进行ajax调用时,javascript执行顺序不可预测,javascript,ajax,cordova,Javascript,Ajax,Cordova,在Mac OS X上的Safari 5和iOs设备上的Safari中测试: 如果ajax请求是从本地文件向远程服务器发出的(例如,您可能希望在phonegap应用程序中执行),则ajax响应中加载的Java脚本将以错误的顺序执行 我创建了一些演示脚本,因为这很难解释: (您需要将该文件存储在本地光盘上以重现问题) 你们中有谁知道为什么会发生这种情况,以及如何确保正确的脚本执行顺序吗?我假设需要按照1、2、3的顺序进行调用?您正在异步调用服务器吗?如果是这样,恐怕这就是异步调用的本质;你不能保证他
你们中有谁知道为什么会发生这种情况,以及如何确保正确的脚本执行顺序吗?我假设需要按照1、2、3的顺序进行调用?您正在异步调用服务器吗?如果是这样,恐怕这就是异步调用的本质;你不能保证他们会按什么顺序完成
一个解决方案是执行您提到的操作,另一个解决方案是同步调用web服务器。一个可能的解决方案如下:在Ajax调用中发送一个索引,将该调用的结果(脚本+索引)存储在索引位置的数组中,如果所有Ajax调用都完成了工作,则检查数组长度。如果是这样,请在数组上运行并附加脚本。这种情况发生在您身上,因为您加载的HTML片段中的
标记不是由浏览器运行的;它们由jQuery运行。事实上,片段必须被明确地梳理成
标记。库(即jQuery)在将HTML片段的其余部分拖放到目标元素中后,会将标记添加到文档中。正因为如此,遵守浏览器行为的正常顺序实际上与这种情况无关
(好吧,它们最终是由浏览器运行的,但它的编排取决于jQuery,而且由于动态添加的
标记的语义,事情又回到了异步状态。)脚本(1、2、3)作为常规的ooh包含在内,我明白了。不幸的是,这超出了我的知识范围。我希望我没有浪费你的时间。祝你好运找到解决方案。好的,谢谢你(尽管这对我来说是个坏消息)。有没有一种简单的方法可以恢复对脚本执行顺序的控制?我尝试了jQuery1.5中引入的两个新Ajax选项,但没有成功:$.Ajax({async:false,crossDomain:true});据我所知,没有办法保存自己修改jQuery代码的代码。关于嵌入式脚本标记的行为几乎没有文档记录,更不用说通过任何类型的配置选项进行控制了。当然,您可以将脚本移到其他地方,也许可以移到主页面,在那里可以正常加载脚本。