尝试更正JSLint投诉时未定义的jQuery值:“不要在循环中创建函数”

时间:2010-09-24 16:43:47

标签: javascript jquery jslint

在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并将其传递给相关函数?

4 个答案:

答案 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'
  • 调用
  • 时,没有return语句的函数返回undefined
  • 一个被调用的函数立即运行(这就是它说数据未定义的原因)
  • 未调用函数的赋值是对该函数的引用(可以在以后调用)
  • 被调用函数的赋值是该函数的return语句