访问函数内部的全局变量,该函数是另一个函数的参数

时间:2013-03-02 22:35:35

标签: javascript ajax jquery

我正在尝试访问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函数中,但这只会返回该函数,而不是父函数。

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

3 个答案:

答案 0 :(得分:0)

要么看看$ .Deferred(),要么将回调函数作为第二个参数传入someFunc。然后在成功时调用该回调函数。

答案 1 :(得分:0)

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

async: false,

到您的Ajax选项。

答案 2 :(得分: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;
    };
    

    `