2013-08-28 28 views
0

我對JQuery非常陌生,但我正在努力學習更多關於它的知識。我寫了一個函數,我期望返回值的返回值,但只是變得沒有定義。有人可以告訴我我要去哪裏嗎?JQuery在返回undefined時返回一個int

這是我的代碼。

function test(){ 
    $.ajax({ 
    url:"", 
    dataType:"json", 
    type:'POST', 
    data:{countMedia:'true'}, 
    success:function(data){ 
return data.value; 
    } 
    }); 
} 

alert(test()); // returns undefined when it should return an int value 

此外,我允許在文檔內編寫函數嗎?這是我需要使用它的地方。

+1

ajax是異步的,'test'將在成功回調發生之前返回。 – zzzzBov

+0

你沒有任何URL在你的AJAX調用 – Sebastien

+0

好的,謝謝你的解釋。所以,我寫單個ajax函數的可能性就不存在了。 – NaN

回答

1

$.ajax是異步的,所以你不應該在你的AJAX回調函數中返回一個值。

您應該將回調傳遞給測試函數,以便在請求完成時執行。

事情是這樣的:

function test(callback){ 
    $.ajax({ 
    url:"", 
    dataType:"json", 
    type:'POST', 
    data:{countMedia:'true'}, 
    success:function(data){ 
     callback(data.value); 
    } 
    }); 
} 

test(function(data) { 
    alert(data); 
}); 

要傳遞的數據請求的參數(如你在評論中問):

function test(requestData, callback){ 
    $.ajax({ 
    url:"", 
    dataType:"json", 
    type:'POST', 
    data:requestData, 
    success:function(data){ 
     callback(data.value); 
    } 
    }); 
} 

test({countMedia:'true'}, function(data) { 
    alert(data); 
}); 
+0

好,太好了!這對我來說很有意義,謝謝。迄今爲止的最佳答案。 :)你能否告訴我,如果我使用回調,如果我也能夠將'data'作爲參數傳遞? – NaN

+0

我很高興它幫助你。是的,你將能夠。 – letiagoalves

+0

太好了。再次請原諒我的不高興的光芒,但我怎麼稱呼'test()'?我只是嘗試'測試()',並期待警報,但我什麼都沒有。 – NaN

0

這就是AJAX是如何工作的(異步)。

function test(){ 
    $.ajax({ 
    url:"", // No url found here 
    dataType:"json", 
    type:'POST', 
    data:{countMedia:'true'}, 
    success:function(data){ 
    alert(data.value) 
    } 
    }); 
} 
test(); 
+0

有沒有辦法保存值並在設置後使用它? – NaN

+0

你可以做到這一點的最佳方式是,簡單地編寫另一個函數,並在ajax的onSuccess中調用該函數並將'data'傳遞給它。 –