Why can I not return responseText from an Ajax function? [duplicate]
Asked Answered
E

3

6

Here is part of my Ajax function. For some reason that I cannot figure out, I am able to alert() responseText but not able to return responseText. Can anybody help? I need that value to be used in another function.

http.onreadystatechange = function(){
    if( http.readyState == 4 && http.status == 200 ){
        return http.responseText;
    }
}
Earlap answered 17/9, 2010 at 2:15 Comment(1)
See [ how to return variable from the function called by onreadystatechange=function() ](#1955748) and [ In AJAX how to retrive variable from inside of onreadystatechange = function () ](#290714).Halfon
P
5

You will not be able to handle the return value that you are returning from your asynchronous callback. You should handle the responseText within the callback directly, or call a helper function to handle the response:

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

function handleResponse (response) {
    alert(response);
}
Pinard answered 17/9, 2010 at 2:18 Comment(3)
You can also have the function that sets http.onreadystatechange take a callback parameter, and call that. See this example.Halfon
@Matthew: Yes, that's a neat idea :)Pinard
But alert is not the same as return you can alert from within the onreadystatechange, But if you do inside handleResponse return response it doesnt return the value to the initial function call.Attwood
T
0

What about :

function handleResponse (response) {
    return response;
}

which return undefined for synchrounous and asynchronous modes

Tidal answered 29/10, 2012 at 0:52 Comment(1)
and how does this relate to the question ?Belgrade
T
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();
}

send a call back function name as second arguement to this function. You can get the response text for that function. simple. But you can't directly return anything from an asynchronous call.

Tad answered 19/6, 2014 at 11:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.