为什么deferred.when()在完成回调中返回promise?

时间:2015-05-25 14:25:15

标签: javascript jquery ajax promise

为什么jQuery的done会在var data = { json: JSON.stringify({ text: 'some text', array: [1, 2, 'three'], object: { par1: 'another text', par2: [3, 2, 'one'], par3: {} } }), delay: 3 }; var firstRequest = $.ajax({ url:'/echo/json/', data: data, type: 'POST' }); var secondRequest = $.ajax({ url:'/echo/json/', data: data, type: 'POST' }); $.when.apply($, [firstRequest, secondRequest]).done(function(data1, data2){ console.log(data1); // returns array, I expect a response object console.log(data2); }); 回调中返回promises,而不是相应的响应数据?

[responseobject, textstatus, jqxhr]

documentation和SO上的各种答案,如this,都意味着我应该获得实际的响应对象,而不是utf8_unicode_ci的数组。

http://jsfiddle.net/2h48mr78/

1 个答案:

答案 0 :(得分:4)

您正在获得正确的结构,但data1data2参数不是实际数据本身。它实际上是一个包含三个项目data, statusText, jqXHR的数组,因此您的数据实际上位于data1[0]中,并会退出:

Object {text: "some text", array: Array[3], object: Object}

文档有点不清楚,但在示例部分中显示了它的工作原理。

相关问题