Ajax $ .when在使用多个参数时返回不同的对象

时间:2015-03-27 14:39:34

标签: jquery ajax .when

我正在使用jquery $ .when来调用一个返回json的REST url。

当我使用单个参数执行$ .when时,我在data1结果中得到的结果与执行多个对象时不同,即使返回参数都应该是独立的。

<script>
$(document).ready(function () {

    fun1(1025);
    fun2(1025);

    function fun1(id) {
        $.when(_restFun1(id), _restFun1(id)).done(function(data1, data2) {
            console.log(data1);
        });
    }

    function fun2(id) {
        $.when(_restFun1(id)).done(function(data1) {
            console.log(data1);
        });
    }

});
</script>

打印到console.log的对象是不同的,即使这两个函数应该打印相同的对象!。

注意

_restFun1函数是这样的:

function _restFun1(id)
{
    return $.ajax({
        url: "http://192.123.12.3/test.php?id="+id,
        data: "",
        dataType: 'json',
        success: function (data1) {
        }
    });
}

返回一个json对象,在一种情况下我得到了json对象,在多次调用的情况下,我得到一个带有多个其他字段的对象,如responseText,responseJSON,一个“成功”字符串然后在一个数组中我需要真正的JSON。

1 个答案:

答案 0 :(得分:2)

注意,在jQuery.when() documentation处,jQuery.ajax调用返回[responseText, textStatus, jqxhr]数组(“成功”)或[jqxhr, textStatus, errorThrown](“错误”)< / p>

  

如果Deferred解析为单个值,则为相应的参数   将保持这个价值。在Deferred解决的情况下   多个值,相应的参数将是那些数组   值。

最近的示例演示可以在文档中找到

var d1 = new $.Deferred();
var d2 = new $.Deferred();
var d3 = new $.Deferred();

$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {
    console.log( v1 ); // v1 is undefined
    console.log( v2 ); // v2 is "abc"
    console.log( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ]
});

d1.resolve();
d2.resolve( "abc" );
d3.resolve( 1, 2, 3, 4, 5 ); // returned as `array` at `.done()`

另见

Ajax response has different format when used with JQuery when function

jquery when documentation for response and errors


响应将是array [responseText, textStatus, jqxhr],其中来自服务器的responseText响应; textStatus successerror; jqxhr jQuery jqXHR对象

尝试

function fun1(id) {
  $.when(_restFun1(id), _restFun1(id))
  .done(function(data1, data2)) {
    // `data[0]`, `data1[0]` should be `responseText` , `responseJSON`    
     console.log(data1[0], data2[0]);  
  })
}