使用jquery在ajax请求中异步false

时间:2013-07-11 07:39:38

标签: jquery asynchronous

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

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

getBooking函数中,如果我使async:false,它可以工作,但浏览器被阻塞,直到ajax请求得到服务。

所以我想到了转身 -

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

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

1 个答案:

答案 0 :(得分: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) {