【问题标题】:Microsoft Edge and ajax timingMicrosoft Edge 和 ajax 计时
【发布时间】: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

所以我有两个问题:

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

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


【解决方案1】:

您的 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*/
    });
},

【讨论】:

  • 您好,我在 IE Edge 中遇到了同样的问题,在 chrome 中没有 IE11。 $.ajax({ type: 'POST', url: serviceUrl, data: JSON.stringify(requestData), dataType: 'json', contentType : 'application/json', 成功: function(response) { console.log("成功"); }, 错误: 函数(errorMsg) { console.log("error"); } });有什么帮助吗?
猜你喜欢
  • 1970-01-01
  • 2019-11-03
  • 2018-02-24
  • 2018-03-11
  • 2021-05-03
  • 2017-01-27
  • 2019-02-07
  • 1970-01-01
  • 2018-06-22
相关资源
最近更新 更多