【问题标题】:JQuery Ajax not working when two browser tabs are open on the same domain当在同一个域上打开两个浏览器选项卡时,JQuery Ajax 不起作用
【发布时间】:2015-12-23 05:27:40
【问题描述】:

我在使用 JQuery 和 PHP AJAX 时遇到了一个非常奇怪的问题。

我有一个通过 AJAX 提交的表单,它工作正常。问题是,当我在另一个浏览器选项卡中从同一站点加载另一个页面时,我的 ajax 请求不再适用于我的另一个选项卡。

这是我目前使用的代码:

Javascript:

$("#step-edit-form").submit(function(e){

    e.preventDefault();

    var data = $(this).serialize();

    //Update order in the database
      $.ajax({
        type: 'POST',
        url: ajax.ajaxurl,
        data: data,
        dataType: 'json',
        cache: false,
        success: function(data){

          if(data.success == 0) {
            $('.message').html(data.message).fadeIn()
            console.log(data.message);
          } 
          else if(data.success == 1) {

            $('.save').hide();
            $('.message').html('Saved Successfully').fadeIn().delay(3000).fadeOut();
            formmodified = 0;
          }
          },

          error: function(xhr, ajaxOptions, thrownError, request, error) {

             console.log('xrs.status = ' + xhr.status + '\n' + 
            'thrown error = ' + thrownError + '\n' +
            'xhr.statusText = '  + xhr.statusText + '\n' +
            'request = ' + request + '\n' +
            'error = ' + error);
          }
      });
  });

我在控制台中得到了这个:

xrs.status = 200
抛出错误 = SyntaxError:输入意外结束
xhr.statusText = OK
请求 = 未定义
错误 = 未定义

PHP 什么也不返回。

就像我说的,这只发生在我在同一个域上加载另一个浏览器选项卡时,否则一切正常。我已经在 Chrome 和 FireFox 中进行了测试,两种浏览器都存在同样的问题。

我在两个标签中打开了这两个页面:

选项卡 1: http://localhost/sbs/admin/edit-step/18(这是我的 ajax 选项卡)

选项卡 2: http://localhost/sbs/(我加载此选项卡之后,我的第一个选项卡中的 ajax 不再正常工作)

【问题讨论】:

  • 请注意,除非您将本地主机部署在公共域中,否则您的本地主机将不对外开放。
  • 是的,我只是粘贴在那里以了解我在做什么。
  • 所以将调试添加到服务器端并弄清楚发生了什么。我的猜测是某种 cookie/会话值存在问题。
  • @epascarello 你是对的。原来是 PHP 会话错误。为此,我已经把头发拉了好几个小时。谢谢。

标签: php jquery ajax


【解决方案1】:

您正面临“未定义的输入结束”错误,这意味着在某些情况下您会得到预期的错误响应。

此错误的可能原因

  • 您的代码从服务器端损坏。就像使用 exit 语句
  • 您缺少逗号(,)、大括号({,})
  • 您的代码返回 null 数据

这不是在新标签中打开的问题,而是意外数据的问题

【讨论】:

    【解决方案2】:

    我认为您的 ajax 调用中缺少 contentType。

    请在您的 ajax 请求中添加以下内容类型。

         "contentType": "application/json; charset=utf-8",
    

    这是您的 ajax 调用或服务器端运行时错误或调用服务的参数相关问题。

    ajax 请求总是在同一域的多个选项卡上调用。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多