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

How to make a request which returns a fake response in JavaScript?

在我的代码中,我想捕获一些 POST 请求错误。为了对此进行测试,我想伪造 POST 请求的响应。在 JavaScript 中有什么方法可以做到这一点?

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

我希望返回 200 以外的状态码作为响应

来自 jQuery 的纪录片页面 (Source);

jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});

An alternative construct to the error callback option, the .fail() method replaces the deprecated .error() method. Refer to deferred.fail() for implementation details.

因此,如果您使用 200 以外的 http 代码结束对 url 的响应,将以“.fail”结尾。

例如,如果您将 header 添加到您的 php 文件,如下所示,它应该可以工作。

header("HTTP/1.0 404 Not Found");

header() 函数的替代方法是 http_response_code() 您可以检查 link http_response_code()

希望对您有所帮助

最简单的方法可能是调用一个 url 实际上 returns 代码如下:

$.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;

使用 fiddler autoResponder 比使用 js 更好。您可以使用 200 代码捕获响应,编辑响应并测试您的错误处理。