好奇AJAX是异步和Scheduled / timer事件

时间:2012-09-21 15:23:53

标签: php ajax timer scheduler

我想要澄清一些我正在考虑的事情......

据说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调用,一个是一个定时器,在一段时间过后检查插槽的状态并采取相应的行动。

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

2 个答案:

答案 0 :(得分:0)

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

您的实际问题似乎是关于如何处理预订的陈旧锁定。一些建议:

  • 转到另一个共享主机。我每年支付15美元用于允许cron工作的共享主机。
  • 每当有人访问该页面时,请检查所有已锁定的预订,如果他们已经足够大,则认为该锁是陈旧的。

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

答案 1 :(得分:0)

在ajax函数继续之后执行代码,而不等待ajax函数完成,除非后面的代码在ajax函数的callback中。