在jQuery中,成功时提供给回调函数的ajax函数数据用
定义success: function (data) { ...
但这使得JSLint不满意(“不要在循环中创建函数”)。
如果我遵循How to fix jslint error 'Don't make functions within a loop.'?中的建议,Firebug会抱怨“数据未定义”且回调函数失败。
示例:的
$(document).ready(function(){
function ajaxSuccess() {
return function (data) {
alert (data);
};
}
$(document).ready(function(){
$.ajax({
type: "POST",
url: "some-url-here",
data: ({ "foo" : "bar" }),
success: ajaxSuccess(data)
});
导致“数据未定义”错误。
但如果我将其改为
$.ajax({
type: "POST",
url: "some-url-here",
data: ({ "foo" : "bar" }),
success: function (data) {
ajaxSuccess(data);
}
});
然后一切都很笨拙 - 但现在我回到了JSLint所涉及的地方。
假设我想通过JSLint传递集合,我如何得到data
返回的url
并将其传递给相关函数?
答案 0 :(得分:2)
您需要从data
来电中删除ajaxSuccess()
参数,因为调用它时未定义data
:
success: ajaxSuccess()
或者你真的不需要ajaxSuccess()
返回一个函数。
function ajaxSuccess(data) {
alert(data);
}
success: ajaxSuccess
修改强>
根据您的评论,您可以像对待ajaxSuccess()
一样调用,并传递您想要的任何参数,只要它们已定义。
function ajaxSuccess( param ) {
return function (data) {
alert (param);
alert (data);
};
}
success: ajaxSuccess( "someParameter" )
答案 1 :(得分:2)
success:
需要一个函数,但您不必为它创建一个函数。
function ajaxSuccess(data)
{
alert (data);
}
// :
// :
$.ajax({
type: "POST",
url: "some-url-here",
data: ({ "foo" : "bar" }),
success: ajaxSuccess // note: no parameters, just the name.
}
});
最初,您说“创建一个新功能,它采用数据参数,并将其分配给success
”。我的版本说“我已经有一个带有数据参数的函数(名为ajaxSuccess)。将它分配给成功”。
答案 2 :(得分:0)
您永远不会将数据作为ajaxSuccess定义中的参数。
答案 3 :(得分:0)
处理javascript函数时总是考虑返回类型。此外,函数引用和函数结果之间存在差异。
实施例
// uncalled
var ajaxSuccess = function(){}; // typeof(ajaxSuccess) == 'function'
//called
var ajaxSuccess = function(){}(); // typeof(ajaxSuccess) == 'undefined'