javascript - 如何用状态码 500 响应 ajax jsonp 请求

标签 javascript c# jquery ajax jsonp

我有一个向 C# HttpHandler 发出 ajax jsonp 请求的应用程序。

function RequestData() {
var parameters = 'value1=' + value + '&value2=' + value2;
$.ajax({
    type: "GET",
    url: 'https://localhost:44300/checkvalues?' + parameters,
    dataType: "jsonp",
    headers: { "cache-control": "no-cache" },
    success: function (msg) {
        alert('all good')
    },
    error: function (jqXHR, exception) {
        alert(jqXHR.status);
    }
});

这是一些服务器端代码。

if (OK)
{
    response.ContentEncoding = System.Text.Encoding.UTF8;
    response.ContentType = "application/javascript";
    response.Write(callback + "({ data: 'allOK' });");
}
else
{
    //error
    response.StatusCode = 500;
    response.SuppressFormsAuthenticationRedirect = true;
    response.StatusDescription = "error";
    response.End();
}

当 OK 为 true 时,就没有问题。 ajax success 函数按预期被调用。但是当我将响应状态代码设置为例如500 触发 ajax 请求的错误部分,服务器响应从未收到 - 什么也没有发生。

如何修改我的响应代码以进入 ajax 错误部分?

我可以通过更改响应来触发解析错误,但我想使用 Http 状态代码来实现。

最佳答案

您可以检测到 JSONp 错误。我不确定为什么 jQuery 选择不这样做。

这是一个不使用 jQuery 的 JSONp 实现。您可能需要稍微修改一下才能使其正常工作。例如,我不确定 jQuery 如何传达 callback_name

function jsonp(success_callback, error_callback) {
    var script, callback_name;
    var parameters = 'value1=' + value + '&value2=' + value2;

    callback_name = "generate random name";

    function after() {
        setTimeout(function () {
            document.getElementsByTagName("head")[0].removeChild(script);
        }, 1);
    }

    script = document.createElement('script');
    window[callback_name] = function (response) {
        after();
        success_callback(response);
    };
    script.type = 'text/javascript';
    script.src = "https://localhost:44300/checkvalues?" + parameters + "&callback=" + callback_name;
    script.async = true;
    script.addEventListener('error', function () {
        after();
        error_callback();
    });
    document.getElementsByTagName("head")[0].appendChild(script);
}

jsonp(function () {
    alert("success");
}, function () {
    alert("failure");
});

关于javascript - 如何用状态码 500 响应 ajax jsonp 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35556141/

相关文章:

jquery - 设置自定义文件名 datatables export excelHtml5 with a select text

javascript - 如果输入或 div 被禁用,则添加一个类

javascript - 为什么 Lodash _.find 方法返回未定义?

javascript - 如何为 React 待办事项应用添加完整的功能?

c# - EF 7(核心)。像 AddTransient 一样创建 DBContext

c# - 如何将 Open Xml 数学方程式转换为 MathML

c# - 为什么 "\u1FFF:foo".StartsWith (":") 返回 true?

javascript - 如何获取特定的视频时间,然后用它来触发事件

javascript - 在构造函数期间自动调用 es6 中所有实例方法的 bind()

jquery - 如何使设定的文本大小填充容器