2010-09-17 15 views
6

İşte Ajax işlevimin bir parçası. Anlayamadığım bazı nedenlerden ötürü, alert() responseText'e ulaşabildiğim ancak responseText döndüremem. Herkes yardımcı olabilir misiniz? Başka bir fonksiyonda kullanılmak için o değere ihtiyacım var.Neden ResponseText'i bir Ajax işlevinden döndüremiyorum?

http.onreadystatechange = function(){ 
    if(http.readyState == 4 && http.status == 200){ 
     return http.responseText; 
    } 
} 
+0

bakınız [ onreadystatechange denilen işlevden değişken dönüş nasıl = fonksiyonu() ] (http://stackoverflow.com/questions/1955248/how-to-return-variable-from-the-function-called -by-on-on-on-durum devresi) ve [ AJAX içinde onreadystatechange = function() işlevinden() ] nasıl geri alınır (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from -inside-of-the onreadystatechange-fonksiyon). –

cevap

5

Zaman uyumsuz çağrınızdan döndüğünüz dönüş değerini işleyemezsiniz. Doğrudan callback'inde içinde responseText işlemek veya yanıtını işlemek için bir yardımcı işlevi çağırmalıdır:

http.onreadystatechange = function() { 
    if (http.readyState == 4 && http.status == 200) { 
     handleResponse(http.responseText); 
    } 
} 

function handleResponse (response) { 
    alert(response); 
} 
+0

Ayrıca 'http.onreadystatechange' bir geri arama parametresi almayı ayarlayan bir işleve sahip olabilirsiniz ve buna çağrı yapın. Bkz. [Bu örnek] (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from-inside-of-onreadystatechange-function/290288#290288). –

+0

@Matthew: Evet, bu düzgün bir fikir :) –

0

Ne hakkında:

function handleResponse (response) { 
    return response; 
} 

synchrounous ve asenkron modları

+2

ve bu soruyla nasıl bir ilişki? – mzzzzb

0
function getdata(url,callback) 
{ 
    var xmlhttp; 
    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
    xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
     var result = xmlhttp.responseText; 
     callback(result) 
     } 
     } 
    xmlhttp.open("POST",url,true); 
    xmlhttp.send(); 
} 
için tanımsız dönmek

Bu işleve ikinci argüman olarak geri arama fonksiyonu adı gönderin. Bu işlevin yanıt metnini alabilirsiniz. basit. Ancak, eşzamansız bir çağrıdan doğrudan bir şey döndüremezsiniz.

İlgili konular