我正在使用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。
答案 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
success
,error
; 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]);
})
}