我正在尝试在我自己的函数中使用jQuery ajax调用的返回,但它一直返回undefined。
function checkUser2(asdf) {
$.ajax({
type: "POST",
async: false,
url: "check_user.php",
data: { name: asdf },
success: function(data){
return data;
//alert(data);
}
});
}
$("#check").click(function(){
alert(checkUser2("muma"));
});
ajax调用肯定有效,因为当我取消注释警报时,我得到了正确的返回,我可以在firebug中看到它。我做了些蠢事吗?
答案 0 :(得分:7)
AJAX调用是异步的 - 这意味着AJAX请求是通常的程序执行顺序,而在程序中,这意味着checkUser2()
没有将数据返回到警报。
您不能以这种方式使用来自$.ajax()
调用的返回值,而是将使用AJAX返回数据的代码移动到success()
函数 - 它的用途。
答案 1 :(得分:3)
我认为你可以做到这一点:
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;
}
但是,正如jquery doc page for ajax function中的第4个例子所说,我认为
请求处于活动状态时阻止浏览器。最好是阻止用户交互>通过其他方式进行同步时。
答案 2 :(得分:1)
请改为尝试:
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"));
});
您可能必须将结果变量作为全局javascript变量移出。我还没有测试过这个。
答案 3 :(得分:0)
您还可以使用jQuery的数据方法存储“数据”,并将其与全局jQuery对象或本地jQuery选择器相关联。例如,
success: function(data) {
$.data('result', data);
}
可以使用
在任何地方访问返回值$.data('result')
你也可以将它与一个局部变量(例如$('#myid')。data())相关联,这样它就是该对象的本地变量,而不是全局范围。