在使用$.post更新此apiPost方法之前,成功地处理了fail (带有401 Status Code的HTTPResponseMessage从api调用中返回) (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代码块,然后运行数十行jquery、javascript、knockout和VM扩展代码,然后返回到fail代码块和内部if,更新modelErrors数组,然后将modelIsValid设置为false。
在更新之后,命中fail代码块,然后运行其他代码,但它永远不会返回到fail代码块。数组永远不会更新,modelIsValid也永远不会设置为false ( ValidationError局部视图是由modelIsValid设置为false触发的)。
原始版本: jquery -1.9.1和knockout-2.2.1。
更新版本: jquery -3.1.1和knockout-3.4.2。
运行在Widnows7旗舰版,VS2015和最新的Chrome上。在开发人员工具中调试javascript。
jquery或knockout中是否有破坏fail的更改。我该如何重写来解决这个问题?
发布于 2018-02-07 02:48:48
事实证明,这与jQuery或Knockout无关。我在中使用更新的jQuery和Knockout的项目使用的是Identity 2.0,它结合了OWIN,它重定向到401上的登录页面。
请参阅Unauthorised webapi call returning login page rather than 401
我使用了丛乐的答案,发布于6/11/15。WebAPI调用现在返回401,没有重定向。
https://stackoverflow.com/questions/45952464
复制相似问题