3

我有以下代码:

    $.ajax({
        url: href,
        dataType: 'json',
        type: 'POST',
        data: $form.serializeArray()
        })
        .done(onDone)
        .fail(onFail);

这是 onDone 函数:

var onDone = function (json, textStatus, XMLHttpRequest) {
    json = json || {};
    if (json.Success) {
        submitSuccessModal(json);
  • 有人可以告诉我这些是否是 onDone 函数的正确参数。$.ajax 调用如何知道如何填充这些?

  • 还有这段代码在做什么:json = json || {};

4

2 回答 2

0

“有人可以告诉我这些是否是 onDone 函数的正确参数。$.ajax 调用如何知道如何填充这些参数?”

这些是正确的论点。但是$.ajax()不知道也不关心你在函数中声明了什么参数——不管你声明了什么,你的函数都会被三个参数调用:从服务器返回的数据,根据 dataType 参数格式化;一个字符串描述状态;以及 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。” 实际的参数名称并不重要,重要的是顺序。你可以忽略那些你不需要使用的;大多数时候,您只需要第一个,即实际数据。

一般而言,无论声明了多少参数,都可以使用任意数量的参数调用 JavaScript 函数,因此如果您只使用第一个参数,您可以只声明第一个参数。或者您可以不声明任何参数,但仍然可以访问通过argumentsobject传递的内容。

“还有这段代码在做什么: json = json || {};`”

||运算符返回第一个真值操作数。在这种情况下,如果json还不是一个对象,那么将其分配给一个空对象是一种简写。在 Ajax 回调的上下文中,我认为您不需要此测试,因为 jQuery 不应该调用您的.done()函数,除非响应被成功解析为有效的 JSON。

(另请注意,该json参数实际上不会接收 JSON,它将接收一个对象。在幕后 jQuery 接收 JSON,但它会解析它并将结果传递给您的函数。)

于 2012-09-18T04:12:19.903 回答
0

.done事件应该具有处理响应的功能。

例如:

.done(function(return){
  //do something here where return is the result of the AJAX call
})

我所做的只是将功能放在我的完成,成功等......就像上面一样。

该代码json = json || {};意味着将变量设置为 JSON 返回或空对象。这比使用新关键字更可取。

这可能是这样的:

.done(function(json){
    json = json || {};
    If(json.Success){
      submitSuccessModal(json);
    }
})
于 2012-09-18T03:17:06.460 回答