【发布时间】:2015-09-18 20:24:40
【问题描述】:
我的 ajax 请求代码已经运行了两年多,但在 Microsoft Edge 中间歇性失败。
set_page : function()
{
$.ajax(
{
type: 'POST',
url: '/ajax/set_page',
dataType: 'json',
data: {'book_id' : this.book_id, 'page' : this.page},
});
},
ajax/set_page 是一个 php 函数,用于更新 book 表中的“page”列。
当我在 Chrome 中调试代码时,只要我越过 $.ajax 调用,数据库就会更新。在 Edge 中,数据库不会更新,直到 javascript 中的程序线程完成。
set_page {
-----------> Chrome db -> page = 11, Edge db -> page = 11
$.ajax({...POST});
-----------> Chrome db -> page = 12, Edge db -> page = 11
};
};
};
----------> Edge db -> page = 12, ajax success!
通常这不是问题,但偶尔线程有很多额外的处理,当最终调用 ajax/set_page php 函数时,$_POST 值为空。
还有其他人在 Edge 中看到过这种行为吗?有什么方法可以启动 ajax 请求,以便它立即调用我的 php 函数?
也许我的问题应该是:为什么我的 $_POST 变量在 Edge 中的 ajax 调用中有时为空?有没有办法在 $.ajax 调用和我的 php 函数之间调试它们? .....................
经过更多调试后,在 IE11 中发生的页面重新加载(以修复 flash/IE11 错误)导致了该问题。
set_page {
-----------> Chrome db -> page = 11, Edge db -> page = 11
$.ajax({...POST});
-----------> Chrome db -> page = 12, Edge db -> page = 11
};
};
if last_page
do stuff
if IE11
location.reload()
};
---------->
not last page: Edge db -> page = 12, ajax success!
last page: Edge db -> page = null, book_id = null
所以我有两个问题:
看起来当页面重新加载时,POST参数被清理了,但ajax请求仍然被执行。
Edge 浏览器被识别为 IE11。
看起来 IE11/flash 错误已在 Edge 中修复,因此我应该能够移除重新加载,但我需要进行更多测试以确保。
【问题讨论】:
-
你是怎么调试这个的?
-
@cmorrissey 我在开发人员工具中的 $.ajax 调用上设置了断点。然后我“跳过” $.ajax 调用。
-
@Emily 我认为调试中更重要的部分是如何确定数据库已更新。不过,如果您确定它推迟了 ajax 调用,也许
setImmediate()可以解决问题? msdn.microsoft.com/en-us/library/windows/apps/hh453394.aspx -
@Katana314 当我处于断点处时,在我跳过 $.ajax 调用之后,当我仍在 set_page 函数中时,我刷新了 phpmyadmin 中的 book 表。此时,在 Chrome 中,数据库已更新,但不在 ME 中。 ajax 调用在开发人员工具的网络选项卡中保持“未决”状态,直到 javascript 线程完成。也许我的问题应该是:为什么我的 $_POST 变量在我的 ajax 调用中有时为空?
-
@Emily 等等,
$_POST变量?这听起来很像您指的是 PHP 代码。这意味着请求已经到达服务器并完成。这听起来更像是一个错误的请求问题,而不仅仅是一个时间问题。当您在 Edge 的 Network 选项卡中查看请求时,您是否看到所有参数都正确发送到服务器?
标签: javascript php ajax internet-explorer microsoft-edge