2013-03-02 88 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; 
    }; 
    

    `

相關問題