Microsoft Edge和ajax计时

时间:2015-09-17 20:24:16

标签: javascript php ajax internet-explorer microsoft-edge

我的代码包含一个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

所以我有两个问题:

  1. 看起来当重新加载页面时,会清除POST参数,但仍会执行ajax请求。

  2. Edge浏览器被识别为IE11。

  3. 看起来在IE中修复了IE11 / flash错误,所以我应该能够删除重新加载,但我需要做一些更多的测试来确保。

1 个答案:

答案 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*/
    });
},