jquery .when(f1,f2).then()返回f1的对象数组,但返回f2的responseText。为什么?

时间:2013-07-01 14:10:27

标签: ajax asp.net-mvc json jquery

我有一个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]

1 个答案:

答案 0 :(得分:3)

请参阅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
}