我有一个带有 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 函数,用于更新图书表中的“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 值为 null。
还有其他人在 Edge 中看到过这种行为吗?有什么方法可以启动 ajax 请求,以便它立即调用我的 php 函数吗?
也许我的问题应该是:为什么我的 $_POST 变量在 Edge 中的 ajax 调用中有时为 null?有没有办法在 $.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 中修复,因此我应该能够删除重新加载,但我需要进行更多测试来确保。
最佳答案
您的 ajax 调用是异步的,因此该函数会运行(在开发工具中命中断点),但这并不意味着它已将数据发送到您的后台并收到操作完成的响应。
set_page : function()
{
$.ajax(
{
type: 'POST',
url: '/ajax/set_page',
dataType: 'json',
data: {'book_id' : this.book_id, 'page' : this.page},
success: function(data){
console.log('the page was set');
}/* make sure there is no trailing comma*/
});
},
关于javascript - Microsoft Edge 和 ajax 计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639355/