【问题标题】:What's the difference between calling a javascript function with arguments, and without调用带参数和不带参数的 javascript 函数有什么区别
【发布时间】:2012-08-24 13:57:33
【问题描述】:

我试图从 ajax 调用中取回数据,并且正在使用代码

jQuery.ajax({
        type: 'POST',
        url: '/chatlog',
        success: exoticlangAjaxCompleted,
        data:'messageLog=' + privateMessageLogJson,
        dataType: 'json'
    });

数据在 JSON 数组中(key = "messageLog")

为什么调用会起作用

    success: exoticlangAjaxCompleted,

但不是

    success: exoticlangAjaxCompleted(),

    success: exoticlangAjaxCompleted(messageLog) ??

JS函数是:

function exoticlangAjaxCompleted(messageLog){
    console.log('exoticlangAjaxCompleted!');
    console.log('chat log is: ' + messageLog);
    console.log('chat log is: ' + dump(messageLog));
}

【问题讨论】:

  • 您正在替换事件处理程序。这必须通过函数或返回函数的东西来完成

标签: javascript jquery


【解决方案1】:

success 参数需要一个对 AJAX 请求完成时将调用的函数的引用。

以下内容:

success: exoticlangAjaxCompleted,

您正在根据需要传递对函数的引用。

而在这种情况下:

success: exoticlangAjaxCompleted(),

您正在调用 exoticlangAjaxCompleted 函数并将结果传递给 success 参数。除非你的函数返回一个函数,否则这是行不通的!

【讨论】:

  • 是的。此外,默认情况下,每个 JS 函数都与同名的变量相关联。这意味着如果你有function abc(){},那么你也有一个var abc,你可以用它来引用这个函数。在您的情况下,exoticlangAjaxCompleted 指的是原始函数。
  • 谢谢大家 - 我会做更多关于通过引用传递的研究
【解决方案2】:

前一种语法起作用的原因是因为success 需要一个函数对象(如果需要的话,为了用参数调用它),其中只调用一个函数不会返回一个函数对象。当您使用function() 表单调用函数时,它会产生输出(即使该输出未定义)这也是此表单有效的原因:

...
success: function() {
    // Some callback code
}
...

那么,它们有何不同?为了说明如何,让我们看一下 WebKit 控制台:

如你所见,执行myFunc返回函数本身,而myFunc()返回**一个对select:无用的对象*

【讨论】:

    【解决方案3】:

    我的理解是你不能以这种方式传递参数。

    如果你尝试这样做:

    success: function(){exoticlangAjaxCompleted(messageLog);},
    

    那可能行得通。

    【讨论】:

      【解决方案4】:

      从 Jquery 文档中,这里有一个关于成功回调的部分:

      "请求成功时调用的函数。函数获取 传递了三个参数:从服务器返回的数据,格式化 根据dataType参数;描述状态的字符串; 和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。”

      jQuery.ajax()

      所以你必须制造一个技巧,比如这里:Pattern of additional parameters

      success: function(..){
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        • 2016-02-25
        • 2020-04-17
        相关资源
        最近更新 更多