jquery post - promise 中未扩展的 XHR

问题描述 投票:0回答:1

我体验到当在 promise 中调用相同的 url

xhr
返回不同的对象

在控制台的打印屏幕中,前两行是第一个请求(返回 HTTP 422)。 XHR 是预期的 xhr 对象

最后两行是下一个请求(返回 HTTP 200)但现在 XHR 对象是实际响应?这是为什么?

我一直在扯头发,真的不明白为什么会这样?我只是在调用一个 jquery 帖子。什么可以造成这种情况?我没有在前端使用 jquery 做任何花哨的事情。只使用原生

$.post
不扩展任何东西

我真的看不出我可以在后端做什么来将 XHR 对象更改为 jquery 中的响应?

$.post(url, post).always(xhr=>{
    const res = xhr.responseText ? JSON.parse(xhr.responseText) : [];
    console.log('xhr', xhr)
    console.log('res',res)
});
javascript jquery xmlhttprequest
1个回答
0
投票

请阅读 jQuery 文档:

注意:deferred.always() 方法接收用于 .resolve() 或 .reject() Deferred 对象的参数,它们通常非常不同。出于这个原因,最好只将它用于不需要检查参数的操作。在所有其他情况下,使用显式 .done() 或 .fail() 处理程序,因为参数将具有众所周知的顺序。

另请阅读有关 AJAX 快捷方式的信息,您将在此处找到合适的代码示例: https://api.jquery.com/category/ajax/shorthand-methods/

var jqxhr = $.get( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
  });

你不应该将

always()
用于 UI/业务逻辑,只能用于 UI 清理,比如删除加载程序。 当你想在你的 POST 调用成功后做一些事情时,使用代码片段中的第一个或第二个回调。

© www.soinside.com 2019 - 2024. All rights reserved.