【问题标题】:jquery .when(f1, f2).then() returns object array for f1 but responseText for f2. Why?jquery .when(f1, f2).then() 返回 f1 的对象数组,但返回 f2 的 responseText。为什么?
【发布时间】:2013-07-01 14:10:27
【问题描述】:

我有一个 jQuery .when() 进行两次 ajax 调用,然后将数据传递给另一个函数:

function getTableData() {
   $.when(ajaxCall1(), ajaxCall2()).then(doStuff);
}

这两种 ajax 方法本质上是相同的,只是它们在控制器上使用了不同的方法:

    function ajaxCall1() {
        return $.ajax({
            type: 'POST',
            url: 'Controller/ControllerMethod1',
        });
    }

    function ajaxCall2() {
        return $.ajax({
            type: 'POST',
            url: 'Controller/ControllerMethod2',
        });
    }

我希望传递给doStuff() 的数据对于每个 ajax 方法都是相同的,但事实并非如此。

    function doStuff(jsonData) {
        doStuffWithData(jsonData[0]);
        doMoreStuffWithData(jsonData[2]);
    }

我希望jsonData[0]jsonData[2] 都包含一个对象数组。 FireBug 向我显示jsonData[0] 的以下内容:

[Object { Description="Completed", Id=3, ItemTypelist=[2]}, Object { Description="Completed - QC", Id=3, ItemTypelist=[2]}, Object { Description="Completed - Approval Needed", Id=3, ItemTypelist=[2]}, 5 more...]

jsonData[2] 看起来像这样:

Object { readyState=4, responseText="[{"Description":"Comple...Item Type 2","Id":1}]}]", status=200, more...}

为什么这些不同?我需要jsonData[2]jsonData[0]

【问题讨论】:

  • 为什么是jsonData[2] 而不是jsonData[1]
  • jsonData[1] 就是"success"

标签: ajax asp.net-mvc json jquery


【解决方案1】:

请参阅this jQuery webpage 上的第一个和最后一个示例。

目前你有 doStuff(jsonData)。 jsonData 对应于仅从第一个 Ajax 查询返回的数组 [data, textStatus, jqXHR] !所以 jsonData[0] 是第一个查询的数据, jsonData[2] 是第一个查询的 XHR。您必须更改 doStuff,例如:

doStuff(jsonData1, jsonData2)
{
  // jsonData1[0] holds data from ajax request 1
  // jsonData2[0] holds data from ajax request 2
}

【讨论】:

  • 不客气,我已经在这个问题上碰壁了几个小时 ;-)
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2021-08-10
  • 2017-01-07
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
相关资源
最近更新 更多