我正在将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/

10-12 00:10