使用$.post
更新此APIPOST方法之前,可以成功处理fail
(从API调用中返回带有401 Status Code
的HTTPResponseMessage
)(failure
和always
在APIPOST方法中未定义)。
self.modelIsValid = ko.observable(true);
self.modelErrors = ko.observableArray();
self.apiPost = function (uri, data, success, failure, always) {
self.isLoading(true);
self.modelIsValid(true);
$.post(rootPath + uri, data)
.done(success)
.fail(function (result) {
if (failure == null) {
if (result.status != 400)
self.modelErrors([result.status + ':' +
result.statusText + ' - ' + result.responseText]);
else
self.modelErrors(JSON.parse(result.responseText));
self.modelIsValid(false);
}
else
failure(result);
})
.always(function () {
if (always == null)
self.isLoading(false);
else
always();
});
};
踏入代码时,fail
代码块被击中,然后在返回fail
代码块和内部if
之前运行数十个jQuery,javaScript,敲除和VM扩展代码,然后更新modelErrors
阵列,然后设置设置。 modelIsValid
to false。
更新fail
块后,然后运行另一个代码,但它永远不会返回到fail
代码块。阵列永远不会更新,并且modelIsValid
永远不会设置为false(valivationError部分视图是由modelIsValid
触发的,为false)。
原始版本:jQuery -1.9.1和淘汰2.2.1。
更新版本:jquery -3.1.1和Quintout -3.4.2。
在Widnows 7 Ultimate,VS2015和Last Chrome上运行。在开发人员工具中调试JavaScript。
在打破fail
的jQuery或淘汰赛中发生了变化。我将如何重写解决问题?
事实证明,它与jQuery或淘汰无关。我正在使用已更新的jQuery和淘汰的项目使用IS ISSIDE 2.0,该项目合并OWIN,将其重定向到401上的登录页面。
请参阅未经授权的WebAPI调用返回登录页面,而不是401
我使用了Cuong Le的答案,发布了6/11/15。WebAPI调用现在返回没有重定向的401。