【问题标题】: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 以同样的方式解决?
  • 我更新了问题,你可以看到实际的网址。

标签: javascript json web-services


【解决方案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.,然后按照这里提到的那样更改了服务器端:stackoverflow.com/questions/22181384/…
猜你喜欢
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2016-11-25
相关资源
最近更新 更多