Mvc Ajax调用控制器不返回statusText

时间:2018-03-22 09:02:38

标签: jquery ajax asp.net-mvc

我正在使用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");

3 个答案:

答案 0 :(得分:2)

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,其中...... {/ p>

  

是浏览器的原生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);
});

取决于哪种方式最适合您。

答案 1 :(得分:0)

  

使用Ajax url参数添加baseurl。

var geturl = window.location;
var baseurl = geturl.protocol + "//" +geturl.host + "//" + geturl.pathname.split('/')[1];

url:baseurl +' controller / action'

答案 2 :(得分:0)

在失败时尝试:

throw new HttpException(400, "bad request");