2013-12-10 114 views
1

這是我第一次使用ajax。而且我不知道ajaxStop在哪裏發生。我正在使用ajaxStart來顯示加載圖像,並需要ajaxStop來隱藏加載圖像。請幫忙。爲什麼ajaxStop()不在Internet Explorer中觸發?

我有這樣的代碼從「PAGEONE」

function ShowFixSteps(path, title){ 
    var winHeight = parseInt(jQuery(window).height() - 100); 
    var winWidth = parseInt(jQuery(window).width() - 600); 

    jQuery.ajax({ 
    url: path, 
    success: function(data) { 
     jQuery("#divPopup").load(path).dialog({ 
     modal: true, 
     width: winWidth, 
     height: winHeight, 
     title: title, 
     position: "center" 
     }); 
    } 
    }); 

    jQuery("#divPopup").bind("dialogbeforeclose", function(){ 
    jQuery("#divPopup").empty(''); 
    }); 
} 

,我主人呼叫網頁上的彈出,我有這樣的代碼來檢查Ajax調用的啓動和停止:

$(document).ajaxStart(function() { 
    alert('start'); 
}); 

$(document).ajaxStop(function() { 
    alert('stop'); 
}); 

$(document).ajaxError(function() { 
    alert('error'); 
}); 

它提醒開始但不是STOP:也沒有錯誤。

注意:START和STOP警報在Chrome上工作,但不在IE上。

+0

ajax stop只在所有ajax請求完成運行後觸發。如果你的代碼中的任何地方都有一個重複的ajax請求,它在上一次停止之前開始,那麼ajax stop將永遠不會觸發。 –

+0

@Eytch,查看我更新的IE問題答案。 – TheCarver

回答

2

ajaxStop在所有當前的AJAX請求完成後觸發。

可以使用the jQuery API documentation.

+0

@KevinB Woops,修復了我的答案。還沒有喝過我的咖啡。 – Kehlan

+0

謝謝你的迴應kehrk和@KevinB。我不記得有另一個Ajax調用,但是有可能在我的代碼在SUCCESS之後強制停止所有的Ajax調用嗎? – Eytch

+0

@Eytch只有當你有權訪問所有的ajax調用,所以你可以遍歷它們並在每個調用.abort。 –

2

您可以通過以下方式使用.ajaxStop()閱讀更多關於ajaxStop

$(document).ajaxStop(function() { 
    $('#loading-spinner').hide(); 
}); 

或者你可以添加:complete回調到您的AJAX功能,像這樣:

jQuery.ajax({ 
    url: path, 
    success: function(data) { 
     jQuery("#divPopup").load(path).dialog({ 
     modal: true, 
     width: winWidth, 
     height: winHeight, 
     title: title, 
     position: "center" 
     }); 
    }, 
    complete: function() { 
     // do something here when ajax stops 
     // like hiding the spinner or calling another function 
    } 
    }); 

正如你所提到的,如何在你的一個評論中停止一個AJAX請求,如下所示:

var ajax1 = $.ajax({ 
    type: "POST", 
    url: "some.php", 
    ... 
}); 

ajax1.abort() 

如果一個特定的AJAX請求是通過這樣中止之前運行時,您可以檢查:

if (ajax1) { 
    ajax1.abort(); 
} 

或者你可以檢查,看看通過執行類似中止之前如果任何 Ajax請求正在運行這個:

var ajax_inprocess = false; 
$(document).ajaxStart(function() { 
    ajax_inprocess = true; 
}); 
$(document).ajaxStop(function() { 
    ajax_inprocess = false; 
}); 

if (ajax_inprocess == true) { 
    request.abort(); 
} 

不過要小心使用.abort(),因爲它只會阻止客戶端代碼聽一個re它不會真正阻止服務器工作。實際上有一些重要的警告使用它,所以請確保你先閱讀它。

更新的問題

對於IE的問題的更新答案,請嘗試使用:

$(document).ajaxComplete(function() { 
    // do something 
}) 

而不是ajaxStop()。每次AJAX請求完成時,將會觸發ajaxComplete(),而不是在所有請求都使用ajaxStop()時完成。也許它會有所幫助,也許不會。

+0

嗨,感謝您的迴應..建議的代碼似乎是沒問題的。但是,$(文檔).ajaxStop沒有在IE中觸發。我想知道什麼似乎是什麼時候在Chrome上工作的概率 – Eytch

+0

@Eytch看到我更新的答案爲IE問題 – TheCarver

+0

謝謝!它正在取得進展。但是,顯示我的Popup之前,正在調用ajaxComplete。如果可能的話,我需要在所有彈出窗口內容被加載後隱藏加載圖像 – Eytch

相關問題