Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,如何将AJAX检索到的值返回到当前函数的父函数?_Javascript_Jquery_Ajax - Fatal编程技术网

在JavaScript中,如何将AJAX检索到的值返回到当前函数的父函数?

在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) {

我有以下JavaScript(和jQuery)代码:

我希望匿名函数
将数据返回到父函数
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
    }
}