【问题标题】:Cross domain XHR works strange跨域 XHR 工作奇怪
【发布时间】:2013-03-23 03:23:42
【问题描述】:

我遇到了很多我无法解决的问题 大约一个月。您可以在此处查看示例页面:http://www.7ya.ru/travel/tours/

所以,问题是小绿色表单是我们使用跨域 XHR 和 有些人对此有问题。 XHR 请求失败。完全没有要求。督察 只是说“取消”。 OSX 和 Win 上的 FF、Opera 和 Chrome 都会出现这个问题。

但是!如果您尝试清理缓存(例如在 Chrome 中):

您会看到小部件开始像魅力一样工作。 此外,如果您尝试只清理缓存,它也不会起作用。

那么,是否有人知道哪些数据可能会影响两个不同平台上大多数浏览器中的 XHR 请求?

P.S.我一直在尝试使用“香草”XHR 和 jQuery 版本,但效果相同。

P.S.S. 一点代码(CoffeeScript):

  1. lt_jq - 本地 jQuery 版本 ($.noConflict())
  2. @inspect - JSON.stringify() 带有一些额外的格式化参数

request = lt_jq.ajax({
    url       : method,
    dataType  : "json",
    data      : params,
    xhrFields : withCredentials:true
})

request.done (data)->
    @request_id = (data.request_id || null)
    callback?(data)

request.fail =>
    console.log "Request failed [#{method}], #{@inspect(params)}"

问题已结束,详情见评论

【问题讨论】:

  • CORS 在 FF、Opera、Chrome 和 IE10 中得到完全支持。 WebSocket 也是,但它真的很奇怪的解决方案。我想这个小部件的功能不在 WebSocket 能力范围内。小部件不需要“实时”用户界面。它只是将数据发送到服务器并接收 JSON。没有别的了。
  • 当然小部件按需发送数据。
  • 对于后端我们使用 RoR (Unicorn, NGINX, RoR)。
  • 您最终解决了这个问题吗?如果是,那是什么?
  • 还没有。时间不够。如果有新的信息,我会写。我想我会在周一至周二完成。

标签: javascript xmlhttprequest cross-domain client-side


【解决方案1】:

您正在使用的网络是否使用缓存代理,或者从它的声音来看,您是否在网络上安装了防病毒软件或某种过滤器来过滤请求?

听起来文件在没有正确标题的情况下被缓存,因此 CORS 标题被切断...

我建议您检查以下最简单的方法: 使用铬:

  1. 清空缓存,打开开发工具,查看请求 确实有效。确保请求和响应标头中有 CORS 标头。
  2. 现在您的缓存中有文件,请重新加载您的页面。检查它是否不起作用。
  3. 现在不行了,去chrome://view-http-cache/查看个别缓存 条目,并查找该文件的请求。打开它。
  4. 检查缓存文件是否有 CORS 标头。

如果没有...确保代理/防病毒不会切断您网络中的 CORS 标头,或尝试其他解决方案

【讨论】:

  • 没有防病毒软件,没有防火墙等。我不确定代理。我想这更多地取决于正在使用的计算机。因为在我的笔记本电脑上(无论我使用哪个网络)一切正常。但例如在我同事的笔记本电脑上它失败了。感谢您关于个人缓存的提示,我明天会检查它。
  • 如果它是缓存,我如何在客户计算机上远程清理它?
  • 如果它是缓存并且第一个请求失败,您需要一个回退请求: 1. 再次请求文件,但在请求中添加 pragma: no-cache 标头 2. 再次请求文件为 JSONP 如果您使用 jquery,您可以将其添加到您的标题中: beforeSend: function (xhr) { xhr.setRequestHeader("Pragma", "no-cache");来源:c-sharpcorner.com/blogs/2918/… 如果您使用 CORS 添加此标头,您可能需要处理“预检”,因为这被视为“选项”:w3.org/TR/cors
  • 感谢您的提示,但它对我不起作用。所以现在我们使用 jsonp 而不是 xhr。
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 2014-08-15
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多