2010-09-17 21 views
6

Aquí hay parte de mi función Ajax. Por alguna razón que no puedo entender, soy capaz de alert() responseText pero no puedo return responseText. ¿Alguien puede ayudar? Necesito ese valor para ser utilizado en otra función.¿Por qué no puedo devolver responseText desde una función Ajax?

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

Ver [ cómo devolver variable de la función llamada por onreadystatechange = function() ] (http://stackoverflow.com/questions/1955248/how-to-return-variable-from-the-function-called -by-onreadystatechangefunction) y [ En AJAX cómo recuperar la variable desde el interior de onreadystatechange = function() ] (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from -inside-of-onreadystatechange-function). –

Respuesta

5

No podrá manejar el valor de retorno que está devolviendo de su devolución de llamada asincrónica. Usted debe manejar la responseText dentro de la devolución de llamada directa, o llamar a una función auxiliar para manejar la respuesta:

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

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

También puede hacer que la función que establece 'http.onreadystatechange' tome un parámetro de devolución de llamada y lo llame. Ver [este ejemplo] (http://stackoverflow.com/questions/290214/in-ajax-how-to-retrive-variable-from-inside-of-onreadystatechange-function/290288#290288). –

+0

@Matthew: Sí, esa es una buena idea :) –

0

¿Qué hay de:

function handleResponse (response) { 
    return response; 
} 

que devuelven indefinido para los modos synchrounous y asíncronos

+2

y ¿cómo se relaciona esto con la pregunta? – 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(); 
} 

envíe un nombre de función de devolución de llamada como segundo argumento a esta función. Puede obtener el texto de respuesta para esa función. sencillo. Pero no puede devolver nada directamente desde una llamada asincrónica.

Cuestiones relacionadas