当与jquerywhen函数一起使用时,Ajax响应具有不同的格式
我正在练习JQuery.when()函数,当我使用执行ajax调用的两个函数时,会收到意外的结果 例如,对于单个函数当与jquerywhen函数一起使用时,Ajax响应具有不同的格式,ajax,json,jquery,Ajax,Json,Jquery,我正在练习JQuery.when()函数,当我使用执行ajax调用的两个函数时,会收到意外的结果 例如,对于单个函数 $.when(getFolders(id)).then(function(folders) { /* return value is as expected */ }); 以下是本例中文件夹的内容 但是在下面的情况下, $.when(getFolders(idOfClickedFolder), getFiles(idOfClickedFolder)) .the
$.when(getFolders(id)).then(function(folders) {
/* return value is as expected */
});
以下是本例中文件夹的内容
但是在下面的情况下,
$.when(getFolders(idOfClickedFolder), getFiles(idOfClickedFolder))
.then(function( folders, files ) {
/* results formats are not similar here with above one */
});
文件夹的内容如下所示,实际的文件夹对象位于响应的第一个对象内。我的意思是我可以通过文件夹[0]访问返回的JSON对象
下面是getFolders函数,getFiles与具有不同ajax url的getFolders相同
function getFolders(rootId) {
return $.ajax({
url: '/FileManager/GetFolders/' + rootId,
async: true,
dataType: 'json'
});
}
我想知道为什么我会得到两种不同格式的结果
谢谢。jQuery始终返回3个参数:data、textStatus和jqXHR。从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jquery1.4.x中,XMLHttpRequest)对象。(来自$.ajax文档) 如果使用$。当使用2个AJAX参数时,这3个参数在一个数组中 从$.when()文档: 如果要创建仅返回第一个参数的自定义AJAX延迟,可以执行以下操作:
// creating a new deferred
var myDfd = $.Deferred();
// execute AJAX query, and when the query is okay, resolve my deferred with only the res of the AJAX query
$.ajax({
url: '/FileManager/GetFolders/' + rootId,
async: true,
dataType: 'json'
}).then(function(folders) {
myDfd.resolve(folders);
});
// I can use my own Deferred
$.when(myDfd).then(function(folders) {
// folders contains ajax response only
});
jQuery始终返回3个参数:data、textStatus和jqXHR。从服务器返回的数据,根据dataType参数格式化;描述状态的字符串;和jqXHR(在jquery1.4.x中,XMLHttpRequest)对象。(来自$.ajax文档) 如果使用$。当使用2个AJAX参数时,这3个参数在一个数组中 从$.when()文档: 如果要创建仅返回第一个参数的自定义AJAX延迟,可以执行以下操作:
// creating a new deferred
var myDfd = $.Deferred();
// execute AJAX query, and when the query is okay, resolve my deferred with only the res of the AJAX query
$.ajax({
url: '/FileManager/GetFolders/' + rootId,
async: true,
dataType: 'json'
}).then(function(folders) {
myDfd.resolve(folders);
});
// I can use my own Deferred
$.when(myDfd).then(function(folders) {
// folders contains ajax response only
});
谢谢你的回答。当我使用单ajax调用时,它不会返回这3个参数。仅当内部有2个ajax调用时才会发生。when.对于简单的ajax调用,不需要使用$.when()。当您希望等待多个查询(或延迟查询)时,此函数非常有用。对于一个查询,您可以执行
$.ajax()。然后(function(res){})
或使用success选项.thx作为答案。当我使用单ajax调用时,它不会返回这3个参数。仅当内部有2个ajax调用时才会发生。when.对于简单的ajax调用,不需要使用$.when()。当您希望等待多个查询(或延迟查询)时,此函数非常有用。对于一个查询,您可以执行$.ajax()。然后(function(res){})
或使用success选项。