为啥我不能使用 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 方法出错?