javascript - Microsoft Edge 和 ajax 计时

标签 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 函数,用于更新图书表中的“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

所以我有两个问题:

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

  2. 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/

相关文章:

javascript - 如何解析 key :value pair on JSON-like string with RegEx on JavaScript?

php - 如果您的防火墙设置阻止了 993 端口,您如何取消阻止它?

c# - 如何将 C# 对象传递给 $.ajax

javascript - 传递到 .on() 函数的变量始终是最后一个元素

javascript - 使按钮在不移动鼠标时消失并在移动时出现

php - 如何使用 php 将数字转换为字母数字系统

javascript - 自动刷新页面中嵌入的 Google 图表的最简单方法

javascript - Ext.form.FormPanel 和表单提交

javascript - Response.Redirect 和 OnBeforeUnload 可以很好地协同工作吗?

javascript - meteor 文件缩略图链接