当两个浏览器选项卡在同一个域上打开时,JQuery Ajax无法正常工作

时间:2015-12-23 05:27:41

标签: php jquery ajax

使用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
  request = undefined
  error = undefined

PHP根本不返回任何内容。

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

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

标签1: http://localhost/sbs/admin/edit-step/18(这是我的带有ajax的标签)

标签2: http://localhost/sbs/(我在第一个标签中的ajax不再正常工作后加载此标签页)

2 个答案:

答案 0 :(得分:1)

您正面临错误'未定义的输入结束'这意味着在某些情况下,当你得到错误的回应然后预期。

此错误的可能原因

  • 您的代码已从服务器端中断。就像使用退出声明
  • 一样
  • 您缺少逗号(,),大括号({,})
  • 您的代码返回 null 数据

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

答案 1 :(得分:0)

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

请在您的ajax请求中添加以下contenttype。

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

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

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