jQuery get和post返回不同的结果等待?

时间:2018-03-17 14:51:07

标签: javascript jquery ajax

我试图在等待jQuery post请求后从服务器响应中获取头文件。

gyp verb tmpdir == cwd automatically will remove dev files after to save disk space
gyp verb command install [ '8.6.0' ]
gyp verb install input version string "8.6.0"
gyp verb install installing version: 8.6.0
gyp verb install --ensure was passed, so won't reinstall if already installed
gyp verb install version not already installed, continuing with install 8.6.0
gyp verb ensuring nodedir is created /usr/local/lib/node_modules/angular-cli/node_modules/node-sass/.node-gyp/8.6.0
gyp WARN EACCES user "nobody" does not have permission to access the dev dir "/usr/local/lib/node_modules/angular-cli/node_modules/node-sass/.node-gyp/8.6.0"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/angular-cli/node_modules/node-sass/.node-gyp"

只返回身体,而

var res = await $.post(GetUrl("/accounts"), JSON.stringify(acc));

将返回一个对象,我可以从中获取一些标题(不是全部)和正文。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

await对它给出的对象使用then(有点间接)。 jQuery的ajax使用三个参数调用then回调(而普通的promise只用一个参数调用then个回调)。由于这种不匹配,你只能获得第一个参数jQuery的ajax调用then

你可以转换返回值(这些是promises,它们是一个管道),所以你得到jQuery的ajax调用回调的所有三件事:

const [data, textStatus, jqXHR] =
    await $.post("/echo/html/", {html: "Hi there", delay: 1})
         .then((data, textStatus, jqXHR) => [data, textStatus, jqXHR]);

Live Example on jsFiddle

这只是必要的,因为jQuery的异常实现。

答案 1 :(得分:0)

$.post()的要点是方便的捷径。当您将其与await一起使用时,如果您使用传统的Promise编码,那么您只会有效地获得传递给Promise解析回调的第一个参数:

$.post(GetUrl("/accounts"), JSON.stringify(acc))
  .then(function(data, status, jqxhr) {
    // ...
  });

您只获得data。如果你按上面那样编码,那么第三个参数将是你的(jQuery扩展)XHR对象。

请注意,您使用$.get()意味着accs将成为已退回的承诺,并且您不知道该操作已完成。