【问题标题】:How to get 406 Error (not acceptable) in jquery如何在 jquery 中获取 406 错误(不可接受)
【发布时间】:2013-09-05 09:38:06
【问题描述】:

我在 my.js 中进行错误处理,在那里我对其他服务器进行跨域调用,对于动态 HTML 模板,我正在使用 Mustache.js。

$.getJSON(url, function(data, textStatus, xhr) {
  $.each(data, function(i, data) {
    introPage(data);
  });
}).fail(function(Error) {
        alert(Error.status);
}); 

function introPage(data )
{
    $.getJSON('myphp.php?jsoncallback=?&template='+testTemplate, function(msg) {
        // my operations

    }).error(function(data) {
            }); 
}

我们在 getJSON 中有 .fail() 来捕获 getJSON 中的错误。我能够捕获 404 错误(未找到),但是当涉及 406 错误(不可接受或说无效输入)或 401 错误(未经授权的访问)时,.fail() 似乎不起作用

但在控制台中抛出错误

当我点击链接时。它以以下格式在 jquery 回调中显示错误

jQuery191014790988666936755_1378113963780({
  "error": {
    "code": 406,
    "message": "Not Acceptable: Sorry, There are no results to display for the given input."
  }
});

现在我想知道如何在我的 JS 中得到这个错误。我没有收到错误代码 406 和 401。我需要该错误代码以便显示相应的错误页面。

谢谢

【问题讨论】:

  • 你被打了,你被一个狡猾的罪犯打了。还有Same Origin Policy
  • @RoryMcCrossan:我不明白???即使涉及两台服务器,但都在同一个域下!比为什么同源政策。
  • 子域不同。对于 AJAX 请求,域必须完全相同——具体到协议。
  • @Rory:脚本和 JSONP 请求不受同源策略限制。
  • @RoryMcCrossan :我所理解的是,当我使用 getJSON 调用我的 php 'url' 时,它返回了错误,但它没有在 .fail() 中向我显示错误,因为对于某些原因错误出现在 jquery 日志或其他任何内容中......所以问我如何捕获该错误

标签: jquery json ajax getjson mustache


【解决方案1】:

从jsoncallback=? 参数和响应jQuery191...780({...}) 来看,jQuery 似乎正在生成一个 JSONP 请求。 JSONP 请求不受同源策略限制,但它们确实有以下限制as described here:

注意:跨域脚本不会调用此 [error] 处理程序,并且 跨域 JSONP 请求。

解决办法:

  1. 如果服务器允许跨域请求,则创建纯 JSON 请求
  2. 查看以下问题的答案:
  3. 使用jquery-jsonp——它不会给你HTTP错误代码

【讨论】:

  • 如果我删除 jsoncallback=? .......我收到错误 XMLHttpRequest 无法加载<a href="/default/index/tourl?u=aHR0cDovL2V4YW1wbGUuY29tL215cGhwLnBocD8mdGVtcGxhdGU9aW50cm9QYWdlLmh0bWw%3D" rel="nofollow" target="_blank">example.com/myphp.php?&amp;template=introPage.html</a>。 Access-Control-Allow-Origin 不允许来源<a href="/default/index/tourl?u=aHR0cDovL215TG9jYWw%3D" rel="nofollow" target="_blank">myLocal</a>。 ........
  • 恐怕这是因为 Same Origin Policy 在这种情况下您必须使用 JSONP 在这种情况下您无法检查 HTTP 状态。
  • 所以没有办法解决这个问题......我的意思是我们应该做些什么......总有解决问题的方法?? @萨尔曼A
  • 如果您控制另一个脚本(发送 JSON 数据或引发 404 错误的脚本),您只需将 this header 添加到该脚本:Access-Control-Allow-Origin: *。另一种解决方案是在您的服务器上托管一个跨域代理脚本。
猜你喜欢
  • 1970-01-01
  • 2013-12-07
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多