我正在尝试访问success
调用的$.ajax()
函数内的全局变量。基本上我有这样的事情:
function someFunc(email) {
var ret;
$.ajax({
url: '/checkuseremail.php?email='+email,
cache: false,
success: function(data) {
if ( data != '1' ) {
alert(email+'\n'+data);
ret = false;
} else {
alert(email+'\n'+data);
ret = true;
}
}
});
alert(ret); // outputs "undefined"
return ret;
}
我知道在给出ajax响应之前会调用底部的alert()
,但我不确定还能做什么。我只是将return语句放在success
函数中,但这只会返回该函数,而不是父函数。
任何想法如何做到这一点?
答案 0 :(得分:0)
要么看看$ .Deferred(),要么将回调函数作为第二个参数传入someFunc。然后在成功时调用该回调函数。
答案 1 :(得分:0)
鉴于您的上一条评论“...在提交表单时将函数作为表单验证的一部分进行调用”我认为您的需求转换为请求的同步处理。 在这些情况下,您可以强制执行ajax调用的同步行为。 尝试添加:
async: false,
到您的Ajax选项。
答案 2 :(得分:0)
不要将成功视为返回值的函数。它是$.ajax()
的设置,用于确定对成功(事件)采取的操作,如控制器。
有几个问题。
你在原帖中说过。在控制权重新掌握在客户手中之前,您正在调用警报。
错误消息告诉你这个。 Undefined
当您从函数返回值时,您必须将其指定给某个值。 ret
对我们的函数来说是全局的,但它永远不会赋值。
您还需要解析为您的值返回的data
对象。我假设data != '1'
只是一些示例代码?你最有可能得到一个JSON对象,可能是XML,但无论如何都没有正确解析它。
您应该使用$.get()代替$.ajax()。 $.get
调用$.ajax
并且是首选方法。
function someFunc(email) {
// assign the value returned to ret
var ret = $.get({ // 2 assign value, 4 use $.get
url: '/checkuseremail.php?email='+email,
cache: false,
success: function(data) {
if ( data ) {
anotherFunc(data); // 3 parse data in function
return false;//1 alert removed
} else {
return true;
}
}
});
alert(ret);
return ret;
};
`