jquery - 为什么第二个独立的ajax响应要等到第一个ajax响应才能获取?

标签 jquery ajax codeigniter setinterval sleep

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

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);
});

Controller 代码是 -

function exp1()
{
    sleep(10);
}

function exp2()
{
    echo 'test';
}

上面的两个ajax调用是独立的,但是在同一个 Controller 上。第一个ajax需要10秒才能得到响应,而第二个ajax将需要1秒才能得到响应。

每 1 秒后触发第二个 ajax 请求。

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

我怎样才能同时驱动两个ajax,以便在第一个ajax调用正在进行时得到第二个ajax的响应?

最佳答案

session 阻塞问题。

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

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

Two simultaneous AJAX requests won't run in parallel

“长话短说 - 一旦您不再需要与 session 变量有关的任何事情,请调用 session_write_close()。”

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

关于jquery - 为什么第二个独立的ajax响应要等到第一个ajax响应才能获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50231777/

相关文章:

javascript - SilverStripe 前端 Ajax 博客文章使用 'read more' 按钮加载

javascript - Ajax jquery 成功范围

php - 变量是数组但不可数?

php - redirect() 在 URI 段前添加一个问号

php - CodeIgniter 从传递单行到传递多行

php - 如何禁用下拉选项

javascript - 检查ajax请求是否为空

javascript - 如何在 Javascript 中删除事件监听器?

php - 在 &lt;input&gt; 上按 Enter 会提交错误的 <form>(一页上有 2 个表单)

jquery - 从 AJAX 的许多页面中序列化独特的表单。适用于 FF/Safari,但 IE 会序列化页面上的所有表单