【问题标题】:ajax requests are Pending parallel requestajax 请求正在等待并行请求
【发布时间】:2017-06-09 02:13:01
【问题描述】:

我在做的是页面加载时调用两个ajax请求

fetch_list_big();
fetch_list_small();

function fetch_list_big(){
  $.post(...);
}
function fetch_list_small(){
  $.post(...);
}

顾名思义,fetch_list_big() 中的请求比fetch_list_small 需要更多时间来完成。 但是由于首先调用了fetch_list_big,所以fetch_list_small 表示挂起,直到fetch_list_big 返回200。

big.php

require_once('files_same.php'); #starts session /connection / configurations etc

#Some heavy mysql stuff  #say 5 seconds

echo json(...)

small.php

require_once('files_same.php'); #starts session /connection / configurations etc

#Some light mysql stuff #say 1 seconds

echo json(...)

我怎样才能在fetch_list_big() 之后以并行方式调用fetch_list_small() 而不使其挂起?

待处理的请求

http://i.imgur.com/vj07tyI.png

第一个请求很大,服务器需要 5 秒

最后 3 个是小请求,应该在第一个之前返回,但它们处于等待状态。

第一次请求返回 200 后

http://i.imgur.com/liPuO70.png

第一次请求返回 200 后。执行最后 3 个请求。

问题

我希望所有请求在不锁定服务器的情况下并行运行(某种会话被锁定了吗?)

【问题讨论】:

  • 为什么你认为fetch_list_small 等待fetch_list_big 完成?除非您明确告诉 jquery 执行同步请求,否则它们都应该以 async 方式执行
  • 这就是我问这个问题的原因。它的异步顺便说一句
  • 你可以将你的小函数包装成setTimeout
  • 那我不明白你在问什么。两个请求并行执行(异步)。有什么问题?
  • 看到我用截图更新了问题@hindmost

标签: javascript php jquery ajax session


【解决方案1】:

我希望所有请求在不锁定服务器的情况下并行运行(某种会话被锁定了吗?)

是的; PHP 将阻止其他脚本访问会话,只要一个脚本实例正在使用它。 (至少对于默认的基于文件的会话存储机制而言。)

您可以在脚本完成会话所需的操作后立即致电session_write_close 来避免这种情况。

【讨论】:

    【解决方案2】:

    您可以在fetch_list_big() 中使用回调

    function fetch_list_big(callback){
    
        $.post(url, function(data){
    
            if(callback){
    
                callback();
    
            }
    
        });
    
    }
    
    fetch_list_big(function(){
    
        fetch_list_small();
    
    });
    

    【讨论】:

    • 不,我想在 big 完成后同时调用。
    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2015-02-21
    • 2014-04-24
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多