2017-07-13 64 views
0
function getUsers() 
{ 
    $.post("/admin/getusers", 
    { 
     username: username_input.val() 
    }, showUsers(data)); 
} 

錯誤:未捕獲的ReferenceError:數據不getUsers

我怎麼可以指定Ajax請求的自定義回調函數定義?

+1

要調用函數而不是傳遞給它一個參數......用'function(data){...}包裝它' – EvgenyKolyakov

+1

它看起來像showUsers是成功的函數。所以'$ .post(url,obj,showUsers);' – James

+0

@James omg,我怎麼能錯過。讓它成爲答案,所以我可以接受它 – Src

回答

1

看起來showUsers 你的成功的功能,所以只是把它作爲:

$.post("/admin/getusers", { 
    username: username_input.val() 
}, showUsers); 
+1

Nit:'showUsers'沒有被調用(不應該是)。它應該*傳遞給'$ .post',以便'$ .post'可以調用它。 –

+0

@FelixKling夠公平:) – James

+0

@FelixKling我認爲這是一個錯字) – Src

1

data應該在回調函數定義的參數,而不是你在一個函數調用作爲參數使用變量:

function callback(data) { /* data is available here */ } 

您可以通過這個函數定義爲您的回調參數:

$.post("/admin/getusers", ..., function callback(data) { /* data is available here */ }); 

然後在函數體內調用您的showUsers,其中data在接收到響應後調用該函數時可用:

$.post("/admin/getusers", ..., function callback(data) { showUsers(data) }); 

或者把它縮短,並ES6-Y:

$.post("/admin/getusers", ..., data => showUsers(data)); 
+0

甚至更​​短:'$ .post(「/ admin/getusers」,...,showUsers);' –

+0

感謝您的解釋,但正如@James上面提到的,更多解決我的問題的便捷方法是隻傳遞函數名稱作爲參數。不管怎樣,謝謝你! – Src

+0

是的,如果函數簽名匹配,並且你不關心「this」,那麼它就可以工作。 – lxe