0

我正在尝试访问调用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;
}

我知道alert()在给出 ajax 响应之前调用了底部的,但我不确定还能做什么。我只是将 return 语句放在success函数内部,但这只会返回该函数,而不是父函数。

任何想法如何做到这一点?

4

3 回答 3

0

看看 $.Deferred() 或者将回调函数作为第二个参数传递给 someFunc。然后在成功时调用该回调函数。

于 2013-03-02T22:42:19.530 回答
0

鉴于您的最后一条评论“...函数在提交表单时作为表单验证的一部分被调用”,我认为您的要求转化为对请求的同步处理。在这些情况下,您可以在 ajax 调用上强制执行同步行为。尝试添加:

async: false,

到您的 Ajax 选项。

于 2013-03-02T23:35:02.623 回答
0

不要把成功想象成一个返回值的函数。这是一个设置,$.ajax()它决定了对成功(事件)采取什么行动,就像一个控制器。

有几个问题。

  1. 你在你原来的帖子里说过。在控制权回到客户手中之前,您正在调用警报。

  2. 错误消息告诉你这一点。 Undefined当你从一个函数返回一个值时,你必须将它分配给某个东西。 ret对我们的函数来说是全局的,但它从来没有赋值过。

  3. 您还需要解析data为您的值返回的对象。我假设这data != '1'只是一些示例代码?您最有可能得到一个 JSON 对象,可能是 XML,但无论哪种方式都没有正确解析。

  4. 您应该使用$.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;
    };
    

    `

于 2013-03-03T00:17:42.080 回答