2010-09-17 7 views
6

Hier ist ein Teil meiner Ajax-Funktion. Aus irgendeinem Grund, dass ich nicht herausfinden kann, kann ich alert() responseText, aber nicht in der Lage, zurückgeben responseText. Kann jemand helfen? Ich brauche diesen Wert für eine andere Funktion.Warum kann ich responseText nicht von einer Ajax-Funktion zurückgeben?

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

See [ wie Variable aus der Funktion von onreadystatechange = function() genannt zurückzukehren] (http://stackoverflow.com/questions/1955248/how-to-return-variable-from-the-function-called -by-onreadystatechangefunction) und [ In AJAX, wie Variable innerhalb von onreadystatechange reactive = Funktion() ] (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from -inside-onreadystatechange-Funktion). –

Antwort

5

Sie können den Rückgabewert, den Sie von Ihrem asynchronen Rückruf zurückgeben, nicht verarbeiten. Sie sollten die responseText innerhalb der Callback direkt handhaben, oder eine Hilfsfunktion rufen Sie die Antwort zu handhaben:

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

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

Sie können auch die Funktion, die 'http.onreadystatechange' setzt, einen Rückrufparameter verwenden und diesen aufrufen. Siehe [dieses Beispiel] (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from-inside-of-onreadystatechange-function/290288#290288). –

+0

@Matthew: Ja, das ist eine nette Idee :) –

0

Was:

function handleResponse (response) { 
    return response; 
} 

die für synchrounous und asynchrone Modi

+2

und wie bezieht sich das auf die Frage? – 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(); 
} 
undefined Rückkehr

senden Sie einen Rückruf Funktionsname als zweites Argument für diese Funktion. Sie können den Antworttext für diese Funktion abrufen. einfach. Sie können jedoch nichts direkt von einem asynchronen Aufruf zurückgeben.

Verwandte Themen