2012-11-26 152 views
4

我有一個JavaScript的快速問題:

我有以下代碼行顯示了一個例子,它工作正常。你可以訪問passeddata沒有問題。

$.getJSON(jsonUrl,function(passeddata){ 
    alert("it worked "); 
}); 

下一個代碼示例不起作用,失敗,出現以下錯誤:

Uncaught TypeError: Object ReferenceError: passeddata is not defined has no method 'replace' jq.html:177 (anonymous function)

$.getJSON(jsonUrl, something(passeddata)); 

function something(passeddata) 
{ 
var jasondata = passeddata; 
alert("it worked ");     
} 

有人能解釋這個問題?我知道它可能很明顯,但我無法找到答案。

+3

從'$ .getJSON(jsonUrl,something(passeddata));'中移除'(passeddata)'''。 –

回答

6

在第一種情況下,您正在向getJSON傳遞一個函數,該函數在JSON的HTTP請求返回時執行。

在第二個中,您立即調用該函數並將其返回值傳遞給getJSON

不要自己調用它,把()遠:$.getJSON(jsonUrl, something);

4

嘗試改變二審回調只是傳遞到的getJSON方法。 passeddata還不存在,所以你只要給函數名稱:

$.getJSON(jsonUrl, something); 

function something(passeddata) 
{ 
var jasondata = passeddata; 
alert("it worked ");     
} 
3
$.getJSON(jsonUrl, something); 

function something(passeddata) 
{ 
var jasondata = passeddata; 
alert("it worked ");     
} 

這是應該的。有了第二個參數,你只需告訴一個應該執行的函數的指針。在你的代碼是立即執行

2

您傳遞的結果「的東西(passedata)」作爲第二PARAM到的getJSON函數調用函數

1

你不想把something(passeddata)作爲調用該函數和用途其回報值作爲回調。你想要的是眼前這個:

$.getJSON(jsonUrl, something); 

注意,當被用作參數參數名稱並不重要,所以你仍然可以在函數中使用passeddata