我正在将jquery 3.2.1与.NET Framework 4.5.2 MVC一起使用。
我有一个到MVC控制器的jquery ajax调用。如果操作成功,则返回
return new HttpStatusCodeResult(200, "success message");
当失败时
return new HttpStatusCodeResult(400, "failure message");
这是我的javascript调用:
var promise = $.ajax({
method: 'POST',
url: '/Home/TestAjaxAsync',
// ...
});
promise.done(function(results) {
console.log("got success: ");
console.log(results);
});
promise.fail(function(err) {
console.log("got error: ");
console.log(err);
});
当在本地托管时,所有这些都可以在Visual Studio IIS Express的本地计算机上完美运行。我可以发送请求,并在带有状态代码的statusText属性中获取“成功消息”和“失败消息”。
但是,当远程托管在生产服务器中时,这将停止工作。我能够成功发送请求并成功接收响应,并获得200 OK的“成功消息”。但是对于400、401、403或任何其他错误代码,statusText始终为“错误”。有时,自定义消息在responseText中显示为带有完整html标记的YSOD。
我也尝试了以下方法,但是根本无法在生产服务器上工作。
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "failure message");
最佳答案
如jQuery Documentation
jqXHR.done(function(data,textStatus,jqXHR){});
成功回调选项的替代构造,有关实现的详细信息,请参考deferred.done()。
jqXHR.fail(function(jqXHR,textStatus,errorThrown){});
错误回调选项的替代构造。.fail()方法替换了不建议使用的.error()方法。有关实现的详细信息,请参考deferred.fail()。done(function(...))
的第一个参数是data
,但是fail(function(...))
的第一个参数是jqXHR
,..
是浏览器的本地XMLHttpRequest对象的超集
你应该试试
promise.fail(function (jqXHR) {
console.log("got error: ");
console.log(jqXHR.responseText);
});
要么
promise.fail(function (jqXHR, textStatus) {
console.log("got error: ");
console.log(textStatus);
});
要么
promise.fail(function (jqXHR, textStatus, errorThrown) {
console.log("got error: ");
console.log(errorThrown);
});
取决于最适合您的。
关于jquery - Controller 的Mvc Ajax调用未返回statusText,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49424415/