1

我的网站上有一个日历控件。它使用一些 ajax 请求从服务器获取一些可用性数据。这是代码 -

var monthlyBookingDetails = getBooking(month, year);//getBooking is ajax function
//rest of code 

这里在getBooking函数中设置异步:false,它可以工作,但浏览器被阻止,直到 ajax 请求得到服务。

所以我想到了一个转身——

while(monthlyBookingDetails.length <= 0){//busy waiting}

但是我觉得这不是正确的方法,所以只是想了解什么是正确的忙等待方法并阻止以下行执行。

4

1 回答 1

1

这段代码有问题,你是对的:

while(monthlyBookingDetails.length <= 0){//busy waiting}

这就是说“做一个无限循环,直到monthlyBookingDetails小于或等于0”。故意引入无限循环(即使它们最终会被破坏)不太可能是明智之举。特别是因为如果您的 AJAX 失败,则不会破坏无限循环。

正确的做法是采用异步方式。这意味着回调。这意味着提供一个在异步代码完成时调用的函数。

所以在里面getBooking你会这样做:

function getBooking(month, year, callback) {
    $.ajax({
        /* all your settings */
        success: function() {
            callback(); // call the callback function
        }
    });
}

然后,您将像这样调用该函数:

getBooking(month, year, function() {
    /* your code here */
});

如果您经常使用 jQuery,那么您可能对这种模式很熟悉。它存在于各种异步操作中,例如 AJAX 和动画。

您几乎肯定希望将数据传递给您的回调。您以正常方式执行此操作:callback(data)并且getBooking(month, year, function(data) {.

于 2013-07-11T07:46:12.187 回答