【问题标题】:JSONP responseText on http errorHTTP错误上的JSONP responseText
【发布时间】:2014-12-04 08:55:55
【问题描述】:

我正在使用带有 jQ​​uery 的 jsonp ajax 请求来发送一些数据。当由于某种原因无法处理此数据时,我想返回一个不是 200 的 http 状态的结果。这样我可以使用我的访问日志来解析它们以进行统计。

不幸的是,当状态码不是 200 时,我没有得到任何响应,尽管 jQuery 回调在响应正文中(当我检查 firebug 时)。有没有办法捕捉响应?

$.ajax({
    type: 'GET',
    url: '{{ sendMsgUrl }}',
    async: false,
    data: { 'form': formData },
    dataType: 'jsonp',
    success: function(json2) {
        if (json2.status == 'ok')
            // do stuff
        else {
            // output error
        };
    },
    error: function(xhr, status, error) {
        // this doesn't work: it never gets here
        alert(xhr.responseText);
        var json2 = eval("("+xhr.responseText+")");
    }
}).fail(function(jqXhr) {
    // never gets here either
    alert('status '+jqXhr.responseJSON);
});

【问题讨论】:

  • 我在文档中没有看到 jqXhr 有字段 responseJSON
  • 你能分享一下你遇到了什么错误

标签: javascript jquery ajax jsonp


【解决方案1】:

没有。 JSONP 不使用 XHR。它将<script> 元素注入到页面中。

理论上,您可能能够找到该脚本的error 事件处理程序,但它不会触发跨域请求(并且除非您进行交叉,否则使用 JSONP 没有多大意义-来源请求)。

使用 JSONP 时,您永远不会在任何事件处理程序中获得 HTTP 响应标头的任何详细信息。

【讨论】:

  • 这也是我的结论。我确实在做一个跨域请求。所以我绕过这个问题的解决方案现在是在服务器脚本返回错误时返回代码 200。当一切正常时,它返回 202(接受)。 jsonp 现在运行正常,我仍然可以在访问日志中有所作为。这可能不完全是 http 状态代码的方式,但对于我的应用程序来说这是可行的。
猜你喜欢
  • 2015-11-04
  • 2014-04-14
  • 2014-03-31
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 2013-10-23
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多