如何在JavaScript中发出返回虚假响应的请求?

时间:2018-01-24 08:29:55

标签: javascript ajax response

在我的代码中,我想捕获一些POST请求错误。为了测试这个,我想伪造POST请求的响应。有没有办法在JavaScript中做到这一点?

$.ajax({
    url: url,
    type: 'POST',
    // further arguments
}).done(function (result) {
    // Sunny day
}).fail(function(result) {
    // Catch it!
});

我希望将状态代码作为响应返回200而不是

3 个答案:

答案 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个代码捕获响应,编辑响应并测试错误处理。