2010-01-07 19 views
3

有人能解釋爲什麼在這種情況下使用時警告語句返回什麼:

$(document).ready(function(){ 

    $.get("/getsomedata.php", function(data){ 
     $("#mydiv").append(data)  
     }); 

    alert($("#mydiv").html()); //outputs nothing 

}); 

當這個語句返回你所期望的:

$(document).ready(function(){ 

    $("#mydiv").append('some info')  
     alert($("#mydiv").html()); //outputs 'someinfo' 

}); 

回答

6

.get沒有被阻塞,腳本的其餘部分在文檔加載時繼續運行。爲了讓它按照您的期望工作,請將警報置於您提供的匿名功能中。這是一個回調函數,將在文檔加載後觸發。即:

$(document).ready(function(){ 

$.get("/getsomedata.php", function(data){ 
    $("#mydiv").append(data); 
    alert($("#mydiv").html()); // This won't fire til somedata.php is loaded 
    }); 

}); 
+0

這是有幫助的,所以你會正確的方式做到這一點?我需要確保數據返回頁面,因爲我的腳本的其餘部分依賴於此。 – Henry

+1

看我上面的編輯;如果您在回撥中執行某些操作,則不會在文檔加載完成之後發生。 – Erik

+0

包含依賴於回調函數中的異步調用的任何代碼。您應該考慮如果php頁面出現錯誤,速度緩慢或者未提供您之後的信息會發生什麼情況。 –

3

數據尚未從異步調用返回。 function(data){$("#mydiv").append(data)}回調函數,並在數據返回時執行。沒有什麼等待。該功能發生在數據恢復時,但這幾乎肯定會在'alert'調用發生後幾毫秒。

對於依賴於數據返回的任何功能,該功能都發生在回調函數本身中。這樣它會等待數據回來,但會盡快發生。

喜歡的東西:

$(document).ready(function(){ 

    $.get("/getsomedata.php", function(data){ 
     $("#mydiv").append(data); 
     alert($("#mydiv").html()); // will show your data  
     }); 
}); 
3

AJAX調用是異步的(默認),這意味着AJAX請求完成之前,你的警報被稱爲(或執行回調),並且是該元素的HTML你想提醒在那一刻是空的。

如果你想解決您的問題,只是把與你的回調函數內部的DIV您在$獲得()

1

AJAX異步擁有的HTML打交道的代碼,這意味着追加爲發生警報後發生。傳遞給$.get()的函數是一個「回調函數」,因爲在操作完成後的晚些時候調用函數。收到數據的任何操作應在回調處理:

$(document).ready(function(){ 
    $.get("/getsomedata.php", function(data){ 
    // this is a "callback" 
    $("#mydiv").append(data)  
    alert($("#mydiv").html()); 
    }); 
}); 
0

你調用get方法,這是調用了XMLHttpRequest異步函數 -

2
$(document).ready(function(){ 

$.get("/getsomedata.php", function(data){ 
    $("#mydiv").append(data)  
    alert($("#mydiv").html()); //outputs nothing 
}); 


}); 

寫這樣的。否則就像你的例子一樣,在GET請求完成之前,html會被提醒。

0

這是因爲,警報第一次調用,而且填補了DIV回調後完成,ocours異步