我的代码包含一个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值为null。
还有其他人在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。
看起来在IE中修复了IE11 / flash错误,所以我应该能够删除重新加载,但我需要做一些更多的测试来确保。
答案 0 :(得分:2)
你的ajax调用是异步的,所以该函数运行(在你的开发工具中命中你的断点),但这并不意味着它已经将数据发送到你的支持并收到一个回复操作完成。< / p>
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*/
});
},