2

我试图从 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));
}
4

4 回答 4

4

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

具有以下内容:

success: exoticlangAjaxCompleted,

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

而在这种情况下:

success: exoticlangAjaxCompleted(),

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

于 2012-08-24T05:47:19.963 回答
2

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

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

那么,它们有什么不同呢?为了展示如何,让我们看一下 WebKit 控制台:

Image showing the WebKit console, myFunc vs myFunc()

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

于 2012-08-24T05:53:02.180 回答
0

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

如果您尝试这样做:

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

那么这可能会奏效。

于 2012-08-24T05:45:52.393 回答
0

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

"A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object."

jQuery.ajax()

So you have to make a trick, like here: Pattern of additional parameters

success: function(..){
...
}
于 2012-08-24T05:53:55.400 回答