一尘不染

一个ajax调用阻止其他ajax调用

ajax

加载页面后,我将对php脚本执行Ajax调用,这将更新服务器。但是,此脚本有时可能需要一分钟才能完成,并且在脚本运行时,我无法执行我需要处理的其他Ajax调用-
即第一个Ajax调用不应中断其他Ajax调用。任何想法如何做到这一点?

首次Ajax通话:

$(document).ready(function () { 
    $.ajax({
        url: "checkForUpdatesByCoach.php",
        success: function(arg){
            if(arg == "200"){
                $('body').prepend("<div style='text-align:center;margin-bottom:-12px;' onClick='location.reload()' class='alert alert-success'>Dine hold er blevet opdateret.Tryk for at opdatere!</div>").fadeIn("slow");  
            }
        }
});
});

第二个Ajax调用(用户触发的调用):

$.ajax({
    type: "POST",
        data: {data:dataAjax},
        url: "updateSwimmer1.php",
        success: function(arg){
            //updating UI
        }
    });

阅读 244

收藏
2020-07-26

共1个答案

一尘不染

腺苷的上述评论是正确的。

“在PHP中,一次只能在一个会话上运行一个脚本,以免覆盖会话数据等。因此,当在同一会话中对PHP脚本进行两​​次ajax调用时,第二个必须等待第一个完成”

为了加快处理速度,您可以提前写入和结束会话(session_write_close())以释放会话锁,并允许使用该会话的其他脚本继续。

注意:调用session_write_close后,您仍然可以从$ _SESSION变量中读取变量,但是您可能不再对其进行写入。

您可以在此处找到一个很好的示例:PHP会话锁–如何防止阻止请求

上面的链接提供的示例:

<?php
// start the session
session_start();

// I can read/write to session
$_SESSION['latestRequestTime'] = time();

// close the session
session_write_close();

// now do my long-running code.

// still able to read from session, but not write
$twitterId = $_SESSION['twitterId'];

// dang Twitter can be slow, good thing my other Ajax calls
// aren't waiting for this to complete
$twitterFeed = fetchTwitterFeed($twitterId);

echo json_encode($twitterFeed);
?>
2020-07-26