2013-03-02 92 views
0

我试图访问$.ajax()调用的success函数内部的全局变量。基本上,我有这样的事情:访问作为另一个函数参数的函数内部的全局变量

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响应之前被调用,但我不知道还能做什么。我只是把返回语句放在success函数中,但那只会返回该函数,而不是父函数。

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

+0

*我不知道自己还能做些什么*:调整你的代码是'success'回调函数内。 – 2013-03-02 22:36:28

+0

我不知道我该怎么做,因为无论何时提交表单,此函数都将作为登录表单验证的一部分进行调用。我可以将整个表单验证放入成功函数中,但这似乎是不好的做法。有没有一种优雅的方式来做到这一点? – SISYN 2013-03-02 22:39:38

回答

0

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

0

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

async: false, 

您的Ajax选项。

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; 
    }; 
    

    `

相关问题