Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当与jquerywhen函数一起使用时,Ajax响应具有不同的格式_Ajax_Json_Jquery - Fatal编程技术网

当与jquerywhen函数一起使用时,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

我正在练习JQuery.when()函数,当我使用执行ajax调用的两个函数时,会收到意外的结果

例如,对于单个函数

$.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选项。