2

我想就我正在考虑的事情澄清一下 AJAX...

AJAX 据说是异步的——如果你想要它是异步的——这意味着如果在页面加载时运行 javascript 并且执行 AJAX 调用,则页面将在服务器处理 AJAX 请求时继续加载......所以假设它可以被比作伪并行是否安全?

现在,两个不同的 javascripts 会如何进行 AJAX 调用。也就是说,当页面加载时,它会一个接一个地遇到两个 js 函数,每个函数都进行 AJAX 调用。因为它们是不同的 js 函数/或两个不同的 js 文件,它们是否必须等待函数返回才能继续?我认为是这样的……

最后我遇到的真正问题...如果我调用了一个 js 函数,并且在该函数中我进行了两个 AJAX 调用,那么它们会被半同时处理...因为我在我的网页上尝试了一些东西,并且是偶然的我一个接一个地放置了两个 AJAX 调用,我认为这就是我得到一些意想不到的结果的原因。不幸的是,我急于交付所以我没有追求它,但我想知道它是否像那样,因为在某些情况下它会非常方便......

像这样的东西

function finalizeReservation(){
    var request = $.ajax({
        type:       'POST',
        url:        './scripts/php/reserve.php',
        data:       { 
                },
        dataType:   "json"
    });

    request.done(function(data,textStatus,jqXHR) {

    });

    request.fail(function(jqXHR, textStatus, errorThrown) {
    });

    var request2 = $.ajax({
        type:       'POST',
        url:        './scripts/php/reserve.php',
        data:       { 

                },
        dataType:   "json"
    });

    request2.done(function(data,textStatus,jqXHR) {

    });

    request2.fail(function(jqXHR, textStatus, errorThrown) {
    });

}

单纯好奇。

我之所以这么想,是因为我有一个记录预订的网页。在完成预订之前,尽管客人可以查看详细信息并进行考虑。在那个时期,数据库中的插槽被设置为待处理并且对另一位客人不可用,因此他们不会发生冲突或进入竞争条件(即在考虑它时另一个完成它,所以当他试图自己完成它时他不能或者如果代码中的粗心也会最终确定它)。问题出在客人的行为中,尽管我已经尝试捕获刷新、后台、退出选项卡、关闭窗口类型的所有事件,因此如果客人出于某种原因没有关闭,则插槽不会停留在挂起状态形成正确的方式(取消)并非所有浏览器都捕获了所有内容。所以我想在服务器中设置一个时间限制,如果它超过它并且状态仍然处于等待状态,则状态被反转为空闲(我有一个分钟计时器的表格,一分钟后它会自动关闭并释放插槽) . 问题是托管服务器不支持 chron 作业,尽管我对它们了解不多,所以我不确定它们会提供多少帮助,并且 mysql 不支持调度程序。所以我考虑进行两个ajax调用,一个是一个计时器,它将在一段时间后检查插槽的状态并采取相应的行动。对它们了解不多,所以我不确定它们会提供多少帮助,而且 mysql 不支持调度程序。所以我考虑进行两个ajax调用,一个是一个计时器,它将在一段时间后检查插槽的状态并采取相应的行动。对它们了解不多,所以我不确定它们会提供多少帮助,而且 mysql 不支持调度程序。所以我考虑进行两个ajax调用,一个是一个计时器,它将在一段时间后检查插槽的状态并采取相应的行动。

任何想法表示赞赏。对不起,很长的帖子。

4

2 回答 2

0

您没有关于 Ajax 的具体问题,但您似乎对它有很好的理解,并且您所说的一切都是正确的。至少对于 jQuery,默认情况下它是异步的,除非您使用,否则Deferred无法保证在 ajax 调用之后执行的代码不会在 ajax 调用之前完成。

您的实际问题似乎是关于如何处理保留的陈旧锁。几个建议:

  • 移动到另一个共享主机。我每年为允许 cron 作业的共享主机支付 15 美元。
  • 每当有人访问该页面时,请检查所有锁定的预订,如果它们足够老,则假定该锁定已过时。

另一个 ajax 调用将无济于事。如果他们关闭页面怎么办?您可以尝试使用onbeforeunload, 来提醒将删除锁定的对话框,但这非常具有侵入性。

于 2012-09-21T15:37:41.163 回答
0

ajax 函数之后的代码将继续执行,无需等待 ajax 函数完成,除非后面的代码在callbackajax 函数中。

于 2012-09-21T15:41:59.117 回答