2012-08-02 79 views
3

我目前遇到了ajaxStart/Stop問題。 當我在輸入框中輸入4位數字時,我將執行AJAX調用(在更改此輸入框時,如果位數= 4),並且加載程序正確顯示。ajaxStart在頁面加載時執行ajax調用時不起作用

如果用戶已經提交頁面並再次訪問此頁面,則會預填充數字,並在加載頁面時執行ajax調用。這工作,但加載程序不顯示。

我打電話ajaxStart /停止對文件準備:

$('document').ready(function() { 
    $('#spin').ajaxStart(function() { 
     startSpinner(); 
    }); 
    $('#spin').ajaxStop(function() { 
     stopSpinner(); 
    }); 
}); 

和執行Ajax調用的功能是文件準備好外:

<script type="text/javascript"> 
    function fillStreets(postalcode, textfield, selectfield, validationfield, init, copy) { 
    PERFORM AJAX CALL HERE 
} 
</script> 

任何的猜測?我已經嘗試使用$(文檔).ajaxStart等,但它沒有奏效。 startSpinner()和stopSpinner()在document.ready之前聲明,所以這也不是問題。

謝謝!

+0

嘗試在'window.load'事件而不是'document.ready'中執行ajax調用。在'document.ready'中,圖像尚未加載,瀏覽器仍在進行一些處理。不知道它是否會解決您的問題,但它值得一試 – MrOBrian 2012-08-02 20:35:15

回答

-1

基本上,調用AJAX的內聯代碼在$(document).ready()代碼之前執行,這就是爲什麼沒有加載器出現的原因。問題是爲什麼你有任何內聯代碼?任何在頁面開始處發生的代碼都應該放在document.ready()處理程序中,我認爲這也應該解決您描述的問題。

當你說「ajax調用是在頁面加載時執行的」,我假設這段代碼是內聯的,而不是在onload處理程序中。如果它在一個onload處理程序中,我仍然會質疑爲什麼它不在準備好的處理程序中。

+0

該函數確實在內聯代碼中聲明。但函數本身在$(document).ready中被調用。這是否也會導致問題? – ThinkLab 2012-08-02 21:28:51

+0

@ThinkLab該函數實際上並未在文檔就緒處理程序中調用,該函數僅在此時被指定爲ajax啓動處理程序。由於ajax start處理程序在內聯代碼運行時尚未分配(因爲ready代碼發生在此點之後),所以ajax start處理程序不會被調用。 – dqhendricks 2012-08-02 22:32:03

+0

@ThinkLab我認爲,沒有JavaScript代碼應該在您的HTML文件中存在。所有的JavaScript應該存儲在一個單獨的JavaScript文件中。如果需要在頁面開始時運行,它應該放在文檔就緒處理程序中。 – dqhendricks 2012-08-02 22:33:34

1

你這樣做是錯誤的,因爲.ajaxStart()和.ajaxStop()僅適用於$(document)從jQuery 1.8開始。確保你的$ .ajaxSetup全局爲真。

$.ajaxSetup({global:true}); 
$('document').ready(function() { 

//your ready functions 

}).ajaxStart(function() { 
    startSpinner(); 
}).ajaxStop(function() { 
    stopSpinner(); 
}); 
相關問題