开发者

return from jquery ajax call

I'm trying to use the return from a jQuery ajax call in my own function, but it keeps returning undefined.

function checkUser2(asdf) {
    $.ajax({开发者_如何学JAVA
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            return data;
            //alert(data);
        }
    });  
}

$("#check").click(function(){
    alert(checkUser2("muma"));
});

the ajax call definitely works, because when I uncomment my alert I get the correct return, and I can see it in firebug. Am I doing something stupid?


The AJAX call is asynchronous - this means that the AJAX request is made out-of-order of usual program execution, and in your program that means that checkUser2() is not returning data to the alert.

You cannot use return values from $.ajax() calls in this way, instead move the code that utilises the AJAX return data to the success() function - that what it's for.


You could do this, I think:

function checkUser2(asdf) {
  var s = $.ajax({
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            return data;
            //alert(data);
        }
    }).responseText;  
   return s;
}       

but, as in the 4th example of the jquery doc page for ajax function says, I think that

Blocks the browser while the requests is active. It is better to block user interaction > by other means when synchronization is necessary.


Try this instead:

 function checkUser2(asdf) {
    var result;
    $.ajax({
        type: "POST",
        async: false,
        url: "check_user.php",
        data: { name: asdf },
        success: function(data){ 
            result = data;            
        }
    });
    return result;  
}       


$("#check").click(function(){
    alert(checkUser2("muma"));
});

You may have to move the result variable out as a global javascript variable instead. I haven't tested this yet.


You could also store the "data" using jQuery's data method and associate it with a global jQuery object or local jQuery selector. For e.g.

success: function(data) {
  $.data('result', data);
}

The return value can the be accessed anywhere using

$.data('result')

You could also associate this to a local variable (for e.g. $('#myid').data()) so that its local to that object rather than in the global scope.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜