在JavaScript中,如何将AJAX检索到的值返回到当前函数的父函数?
我有以下JavaScript(和jQuery)代码: 我希望匿名函数在JavaScript中,如何将AJAX检索到的值返回到当前函数的父函数?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有以下JavaScript(和jQuery)代码: 我希望匿名函数将数据返回到父函数checkEmail()。我试过这样做: function checkEmail(email) { if (email.length) { var ret = null; $.getJSON('ajax/validate', {email: email}, function(data){ if (data == false) {
将数据返回到父函数checkEmail()
。我试过这样做:
function checkEmail(email) {
if (email.length) {
var ret = null;
$.getJSON('ajax/validate', {email: email}, function(data){
if (data == false) {
// stuff
}
ret = data;
})
return ret;
}
}
但是这当然不起作用,因为$.getJSON()
调用是异步的,所以它将在GET请求完成之前返回ret
有什么想法吗
谢谢大家! 通常,处理此类问题的最佳方法是使用某种形式的回调函数。实际上,这是唯一可行的解决方案——唯一的另一个选择是为浏览器编写自己的扩展,这有点过分(除非你真的喜欢把头撞到墙上)。事实上,在这些板块上有相当多的平行问题:你可以试着搜索一些,很多都很好
修改您的代码:
function checkEmail(email) {
/*
original parts of the function here!
*/
if (email.length) {
$.getJSON('ajax/validate', {email: email}, function(data){
if (data == false) {
// stuff
}
checkEmailResponse( data );
})
}
}
function checkEmailResponse( data )
{
// do something with the data.
}
您可以拥有父功能块,直到有东西存在。为了降低CPU强度,可以使用某种超时
function checkEmail(email) {
if (email.length) {
var ret = null;
$.getJSON('ajax/validate', {email: email}, function(data){
if (data == false) {
// stuff
}
ret = data;
})
while(ret == null){
}
return ret;
}
}
希望这能有所帮助。您只需改变处理问题的方式即可。你知道你上面所说的是行不通的,所以你不能用“调用函数并对其返回值进行操作”来思考
您需要切换到类似toby对CPS的建议,或者根据触发此函数的原因,使用自定义事件处理它。您也应该使用回调,因为调用是异步的,因此您可以围绕此想法设计整个JavaScript源代码(正如其他人所指出的)
如果确实需要将其作为返回值,则需要关闭异步调用,但不建议这样做,因为它会阻塞页面,直到有响应为止
function checkEmail(email, callback) {
if (email.length)
return $.ajax({
data: {email: email},
url: 'ajax/validate',
async: false
}).responseText; // only the raw response text of the XMLHttpRequest
}
}
我每天都会在这里看到很多次同样的问题。在了解AJAX的工作原理之前,不要开始编写AJAX,各位!!然后,人们投票支持这个问题,而不是像他们应该的那样,以重复的方式关闭它。FWIW,这是以重复的方式关闭的,这要求的几乎是相同的。
function checkEmail(email, callback) {
if (email.length)
return $.ajax({
data: {email: email},
url: 'ajax/validate',
async: false
}).responseText; // only the raw response text of the XMLHttpRequest
}
}