两个快速的AJAX调用混淆了PHP

pei*_*rix 0 php ajax

我只是碰到了一些奇怪的东西.我有两个JSON数组,它们包含不同的数据.通常我只需要其中一个数据,但是当我尝试进行双ajax调用以从两个数组中获取数据时,我最终得到两个调用的完全相同的数据.

假设数组1保存用户的JSON数据,数组2保存住宅的JSON数据,我想从两个数组中获取数据:( PS!我剪掉了urltype保存了几行.)

$.ajax({
   async:false,
   data:"type=users&id=3,5,6",
   success: function(data) {
      data = JSON.parse(data);
      alert(data.length) //will alert 3 as expected
   }
});
Run Code Online (Sandbox Code Playgroud)

然后我再打电话给那里买些房子:

$.ajax({
   async:false,
   data:"type=houses&id=2,4",
   success: function(data) {
      data = JSON.parse(data);
      alert(data.length) //alerts 3 as well...
   }
});
Run Code Online (Sandbox Code Playgroud)

当我查看params和Firebug的响应时,我可以看到params是正确的,但是响应是错误的.

在我的PHP中,我甚至试图回应一下这样做:

echo $_GET['id'] . ", " . $_GET['type'];
Run Code Online (Sandbox Code Playgroud)

这使得请求在两个调用中看起来完全相同...如果我在ajax调用之间放置一个警报,我得到预期的结果(因为系统等待).但我认为将它们两者同步就足以避免电话崩溃..?

编辑:我已经尝试创建一个在AJAX函数中调用的php文件的副本,并设置调用以转到单独的文件,这使得一切都按预期工作.所以我很确定javascript没什么问题.

更多编辑:如果我从第二个AJAX调用中删除参数,我仍然得到相同的结果.用Firebug查看请求我可以看到params列表是空的,但响应仍然相同......

更多编辑:在Firebug中查看,我可以看到有一个标题名称connection,其值为keep-alive,然后调用标题Keep-Alive值为300.我猜这可能与它有关?在jQuery文档中找不到任何内容,但是......

源代码:我做了一个小测试用例,它重现了这个问题:

PHP

echo $_GET['test'];
die();
Run Code Online (Sandbox Code Playgroud)

HTML

<sript>
    $(document).ready(function() {
      $.ajax({
        type:"get",
        url:"bugtest.php",
        data="test=hello",
        success: function(data) {
          $("output").append(data);
        }
      });
      $.ajax({
        type:"get",
        url:"bugtest.php",
        data="test=world!",
        success: function(data) {
          $("output").append(" "+data);
        }
      });
    });
  </script>
  <h1>AJAX bug in Aptana's PHP server?</h1>
  <output></output>
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的,并且它做同样的事情:hello world!我没有得到我期望的那样,我得到hello hello......

Bol*_*wyn 6

首先,同步AJAX调用在实时系统上基本上是坏的.测试还可以,但不要在家里这样做,孩子们!为什么?因为如果服务器没有在一秒内回答或根本没回答(这很可能),浏览器选项卡将变为无响应.在最糟糕的情况下(旧的Mozillas),整个浏览器将冻结.

</teaching>

  • 缓存不应该是问题,因为当您发送GET请求时,URL是不同的(POST很可能根本不缓存).

  • 您的alert()测试告诉您,它不是PHP的错误,因为它会根据请求发回所有内容

  • 所以我们继续使用JavaScript:

    • 如果您手写代码,我猜,您对请求进行了错误的检查onreadystate(即,对错误的请求对象处理请求的数据检查的函数)

    • 你能告诉我们你使用哪个图书馆?看起来像我的原型.

干杯,


Tig*_*ger 5

你尝试将时间戳添加到URL?只是为了避免缓存等

 data:"type=houses&id=2,4&"+timestamp
Run Code Online (Sandbox Code Playgroud)

更新:

或者只是尝试cache:false使用Ajax

你用 async:false

Async: 
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有请求都是异步发送的(默认情况下设置为true).如果需要同步请求,请将此选项设置为false.请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作.

可能是因为这个临时阻止..你可以尝试将其设置为true.

  • HTTP是通过TCP发送的,因此不会发生"通过线路"的混乱.如果它正在填充,它将在客户端或服务器上,并且从描述中,我假定JavaScript - PHP页面执行没有太大的空间来相互影响. (3认同)