How to return a value from a function that calls $.getJSON?

后端 未结 3 1158
青春惊慌失措
青春惊慌失措 2020-12-01 15:02
function lookupRemote(searchTerm)
{
   var defaultReturnValue = 1010;
   var returnValue = defaultReturnValue;

   $.getJSON(remote, function(data)
   {
      if (da         


        
相关标签:
3条回答
  • 2020-12-01 15:38

    The function you pass to getJSON is run when the response to the HTTP request arrives which is not immediately.

    The return statement executes before the response, so the variable hasn't yet been set.

    Have your callback function do what needs doing with the data. Don't try to return it.

    0 讨论(0)
  • 2020-12-01 15:48

    If you don't want to use asynchronous function, better use the following:

    function getValue(){
       var value= $.ajax({ 
          url: 'http://www.abc.com', 
          async: false
       }).responseText;
       return value;
    }
    

    This function waits until the value is returned from the server.

    0 讨论(0)
  • 2020-12-01 15:52

    This happens because that callback function (function(data) {...}) runs later when the response comes back...because it's an asynchronous function. Instead use the value once you have it set, like this:

    function lookupRemote(searchTerm)
    {
        var defaultReturnValue = 1010;
        var returnValue = defaultReturnValue;
        $.getJSON(remote, function(data) {           
            if (data != null) {
                  $.each(data.items, function(i, item) {                 
                        returnValue = item.libraryOfCongressNumber;
                  });
            }
            OtherFunctionThatUsesTheValue(returnValue);
         });
    }
    

    This is the way all asynchronous behavior should be, kick off whatever needs the value once you have it...which is when the server responds with data.

    0 讨论(0)
提交回复
热议问题