Jquery $ .when有多个Ajax请求问题

时间:2013-10-20 11:36:59

标签: php jquery ajax json

我正在尝试使用Jquery从PHP文件中获取多个ajax请求。这是我的代码:

var req = $.when($.get('file.php?load=products'),$.get('file.php?load=config'),$.get('file.php?load=settings'));

req.done(function(products,config,settings){
  console.log(products);
  console.log(config);
  console.log(settings);
});

问题在于,不是单独获取Json请求的数据,而是数据附带了其他对象,例如:Object { readyState=4, responseText="[{ "value": 5, "sku": ".../uploads/coffee.png" }]", status=200, more...}],当我尝试解析Json数据时会导致错误。

当我通过我的PHP脚本查看返回的参数时,一切看起来都很好,如果我不使用$.when方法,它甚至可以正常工作,而是使用每个ajax请求的简单回调。

我需要使用$.when方法,因为我需要在完成这三个ajax调用后执行。

希望你能帮助我,谢谢!

编辑: 好的,我不知道为什么,但是如果我使用products[0]而不是products,它就会起作用。

2 个答案:

答案 0 :(得分:1)

来自official documentation

示例:在两个ajax请求成功后执行一个函数。 (有关ajax请求的成功和错误案例的完整描述,请参阅jQuery.ajax()文档。)

$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
  // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
  // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
  var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
  if ( /Whip It/.test( data ) ) {
    alert( "We got what we came for!" );
  }
});

所以你确实收到了一个参数数组,每个ajax调用一个。每个参数都是[data, textStatus, jqXHR]

的数组

通过阅读产品[0],您正在访问data

答案 1 :(得分:0)

这可能看起来像一个大胆的,激进的举动,但是 - 您是否考虑过只是采用您真正想要使用的数据?那是:products.responseTextconfig.responseTextsettings.responseText