2

在 jQuery ajax 函数中,成功时提供给回调函数的数据定义为

success: function (data) { ...

但这让 JSLint 不高兴(“不要在循环中创建函数”)。

如果我遵循如何修复 jslint 错误“不要在循环中创建函数。”中的建议?, 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

4 回答 4

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" )
于 2010-09-24T16:48:29.510 回答
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)。将其分配给成功”。

于 2010-09-24T16:48:42.117 回答
0

您永远不会在 ajaxSuccess 的定义中将数据作为参数。

于 2010-09-24T16:48:08.950 回答
0

在处理 javascript 函数时,请始终考虑返回类型。此外,函数引用和函数结果之间存在差异。

例子

// uncalled
var ajaxSuccess = function(){};     // typeof(ajaxSuccess) == 'function'
//called
var ajaxSuccess = function(){}();   // typeof(ajaxSuccess) == 'undefined'
  • 没有返回语句的函数在调用时返回未定义
  • 被调用的函数立即运行(这就是它说数据未定义的原因)
  • 未调用函数的赋值是对该函数的引用(可以在稍后的时间点调用)
  • 被调用函数的赋值是该函数的返回语句
于 2010-09-24T17:13:56.543 回答