为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]
Posted
技术标签:
【中文标题】为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]【英文标题】:Why can I not get a JSON file from the local network using a XMLHttpRequest? [duplicate]为什么我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制] 【发布时间】:2014-07-03 13:10:00 【问题描述】:我发现很多人都有类似的问题:
XMLHttpRequest cannot load %3192.168.100.201:8080/history?_=1400139870373. Cross origin requests are only supported for HTTP.
我尝试过像这样启动浏览器:
--disable-web-security
--allow-file-access-from-files
如何从本地网络的服务器获取 JSON 文件?
更新
JS代码:
function getHistory()
$.ajax(
url: '192.168.100.201:8080/history',
dataType: 'json',
success: function(data)
console.log(data);
,
cache: false
);
【问题讨论】:
现代浏览器禁止使用。在较旧的浏览器中它确实有效。为了解决这个问题,您应该编写一些服务器端代码来返回文件并使用 javascript 调用它。 如果我从本地网络服务器返回相同 json 的 php 文件请求怎么办?很快:js从本地php请求json> php从服务器请求json 那些答案没有帮助。我也从本地网络上的另一台机器获取 json,而不是同一台机器。所以接受的答案没有帮助,我的问题中提到了第二个答案。 @FilipLuch:你确定吗?您仍然需要指定一个有效的 URL。你试过吗?192.168.100.201:8080/history
看起来不像是有效的 http://
URL。另一篇文章中的解决方案建议使用有效的 URL。我假设您的问题通过有效的http://xx
URL 以同样的方式解决?
我更新了问题,你可以看到实际的网址。
【参考方案1】:
仅 HTTP 支持跨源请求。
这是因为您在请求中忘记了http://
:
url: 'http://192.168.100.201:8080/history',
浏览器不知道你想要什么协议。
您还应该从目标服务器端发送访问控制标头(了解 Cors [1]):
Access-Control-Allow-Origin: http://<requesting host>
并非在所有情况下都必须,但现代浏览器的良好做法和安全功能。
[1]https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
【讨论】:
谢谢。这行得通。起初我得到了No 'Access-Control-Allow-Origin' header is present on the requested resource.
,然后按照这里提到的那样更改了服务器端:***.com/questions/22181384/…以上是关于为啥我不能使用 XMLHttpRequest 从本地网络获取 JSON 文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用xmlhttprequest抓取数据时主键跳转量大?
为啥 XMLHttpRequest 上传在 Firefox 中没有正确失败?
不使用本机 XMLHttpRequest 的原因 - 为啥 $.ajax 是强制性的?
为啥浏览器不遵循使用 XMLHTTPRequest 和 CORS 的重定向?
并行文件上传 XMLHttpRequest 请求以及为啥它们不起作用
为啥我收到 XMLHttpRequest cannot load - Preflight response is not successful 仅使用 Delete 方法出错?