为什么第二个独立的ajax响应等待直到第一个ajax响应?

时间:2018-05-08 10:47:18

标签: jquery ajax codeigniter setinterval sleep

我正在使用codeigniter。 以下是我的AJAX代码 -

jQuery(document).ready(function () {
    $.ajax({
         type:'post',
         data:'',
         url:HOST+'/exp1',
         success:function(data)
         {
             alert('here1')
         }
    });

    setInterval(function(){
         $.ajax({
              type:'post',
              data:'',
              url:HOST+'/exp2',
              success:function(data)
              {
                   alert(data)
              }
         });
    }, 1000);
});

控制器代码是 -

function exp1()
{
    sleep(10);
}

function exp2()
{
    echo 'test';
}

以上两个ajax调用都是独立的,但在同一个控制器上。首先ajax需要10秒才能得到响应,而第二个ajax需要1秒才能得到响应。

每隔1秒就会触发第二个ajax请求。

但是当我执行代码时,我没有得到第二个ajax的响应,直到获得第一个ajax响应。

如何同时驱动两个ajax,以便在第一个ajax调用正在进行时我将从第二个ajax得到响应?

1 个答案:

答案 0 :(得分:2)

会话阻止问题。

在exp1()中 - 在 sleep(10)之前调用 session_write_close()可以防止其他并发页面请求的延迟。

“默认情况下,PHP将其会话数据写入文件。当您使用session_start()启动会话时,它会打开文件进行写入并将其锁定以防止并发编辑。”

Two simultaneous AJAX requests won't run in parallel

“长话短说 - 一旦你不再需要与会话变量有任何关系,就调用 session_write_close()。”

https://www.codeigniter.com/user_guide/libraries/sessions.html#a-note-about-concurrency