2

.when()2 つの ajax 呼び出しを行い、データを別の関数に渡す jQueryがあります。

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]

4

1 に答える 1

3

この jQuery Web ページの最初と最後の前の例を参照してください。

現在、doStuff(jsonData) があります。jsonData は[data, textStatus, jqXHR]、最初の Ajax クエリから返された配列のみに対応します。したがって、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
}
于 2013-07-01T14:22:58.337 に答える