我正在使用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");
答案 0 :(得分:2)
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");