在我的代码中,我想捕获一些POST请求错误。为了测试这个,我想伪造POST请求的响应。有没有办法在JavaScript中做到这一点?
$.ajax({
url: url,
type: 'POST',
// further arguments
}).done(function (result) {
// Sunny day
}).fail(function(result) {
// Catch it!
});
我希望将状态代码作为响应返回200而不是
答案 0 :(得分:2)
来自jQuery的文档页面(documentation for XmlTextWriter
);
jqXHR.fail(function(jqXHR,textStatus,errorThrown){});
错误回调选项的替代构造,.fail()方法替换了不推荐使用的.error()方法。有关实现的详细信息,请参阅deferred.fail()。
因此,如果您使用(id)
以外的http代码结束对url
的回复,则会以' .fail'结束。
例如,如果您在php文件中添加一个标题,如下所示,它应该可以正常工作。
200
header()函数的另一种方法是http_response_code(),你可以检查链接.Net fiddle
希望这有帮助
答案 1 :(得分:1)
最简单的方法是使用只调用一个实际返回代码的url:
$.ajax({
url: 'https://httpstat.us/400',
type: 'POST',
// further arguments
}).done(function (result) {
console.log("Success");
}).fail(function(result) {
console.log("Fail");
console.log("Result", result);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
但您也可以根据this answer覆盖$.ajax()
函数,使其始终失败:
function ajax_fail(jqXHR, textStatus, errorThrown) {
return function (params) {
var deferred = $.Deferred().reject(jqXHR, textStatus, errorThrown);
return deferred.promise();
}
}
$.ajax = ajax_fail();
$.ajax({
url: '',
type: 'POST'
}).done(function (result) {
console.log("Success");
}).fail(function (result) {
console.log("Error");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
您传递给ajax_fail()
函数的参数将是您的.fail()
回调添加的参数。您可以在那里添加任何您想要返回的内容。
小警告:请勿在生产中使用此功能,或者您仍希望其他$.ajax
来电。每次拨打$.ajax()
时,都会以这种方式失败。
如果您只想为一次AJAX调用执行此操作,请执行以下操作:
var ajaxFunc = $.ajax;
// use the above code
// restore old $.ajax function
$.ajax = ajaxFunc;
答案 2 :(得分:1)
最好使用fiddler autoResponder而不是js。您可以使用200个代码捕获响应,编辑响应并测试错误处理。