2011-08-26 146 views
0

我嘗試了幾個小時纔得到以下代碼工作。 代碼應暫停,直到頁面加載。我遇到的問題是AJAX異步執行。如何強制代碼在執行前等待?使用JavaScript在頁面完全加載後執行代碼

var i = 1; 
function On_Success(){ 

    i = i+1; 
    if(i<=10){ 

    $('<div id="p'+i+'">b</div>').replaceAll('#b'); 
    $('#p'+i).load('tabelle.html'); 
    //here shoul be waited, til the page is loaded 
    On_Success(); 
    }; 
    }; 

    function knopf(){ 
    $('body').append('<div id="p'+i+'">a</div>'); 
    $('#p'+i).load('tabelle.html'); 
    On_Success(); 
    }; 

回答

0

.load接受加載完成時運行的回調;你可以使用它來代替更詳細的jQuery.ajax函數,這將需要你編寫額外的代碼來填充你的元素。

jQuery("#p", i).load("tabelle.html", function() { 
    //code to run when tabelle.html has finished loading 
}); 

將您的代碼更改爲以下內容。它應該工作:

var i = 1; 

function On_Success() { 

    i = i + 1; 
    if (i <= 10) { 
     $('<div id="p' + i + '">b</div>').replaceAll('#b'); 
     $('#p' + i).load('tabelle.html', On_Success);   
    }; 
}; 

function knopf() { 
    $('body').append('<div id="p' + i + '">a</div>'); 
    $('#p' + i).load('tabelle.html', On_Success); 
}; 

另一個說明,是否絕對有必要在填充其他div之前等待一個加載完成?爲什麼你不能做這樣的事情:

function On_Success() { 
    var i = 0; 
    while(i < 11) { 
     $('<div id="p' + i + '">b</div>').replaceAll('#b'); 
     $('#p' + i).load('tabelle.html');   
    }; 
}; 

而且,我不知道是什麼knopf功能正在做什麼。 i的值應該在那個函數中?你如何調用你的代碼?

+0

原始問題要求「頁面加載」不是加載功能。我編輯了我的答案。 –

+0

我得到了同樣的問題,代碼繼續,沒有等待 – nadeschda

+0

現在它的工作,我已經在On_Success調用後刪除「()」,你知道爲什麼嗎? – nadeschda

2

Ajax和負載都有一個successs函數,可以在響應完全返回時運行。

$.ajax({ 
     async: true, 
     type: "GET", 
     url: url, 
     data: params, 
     success: function(html){ 
       //do stuff here 
       }, 
     error: handleAjaxErrors 

    }); 

如果你想使用負荷時,有一個成功的回調,以及:

$("#myDiv").load('/ajax/data/get', function() { 
    //do stuff here 
}); 
1

負載的功能有一個成功處理程序:

$('#p'+i).load('tabelle.html', function() { 
    On_Success(); 
}); 

的成功處理程序只調用在ajax調用成功完成之後,以及提供的內容添加到DOM之後。

你可以看到完整的文檔在這裏:

http://api.jquery.com/load/

如果你也想捕捉你需要使用完整$.ajax通話按@克里斯的回答在客戶端上的錯誤條件。

相關問題