无法访问与JavaScript JSON文件(Cannot access json file wit

2019-09-26 22:01发布

我想读这个页面的内容JSON: http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id=397用JavaScript。

于是,我开始这个脚本:

var req = new XMLHttpRequest();
    req.open("GET", "http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id=397", true); 
    req.onreadystatechange = monCode;   
    req.send(null);      

    function monCode() { 
        if (req.readyState == 4) { 
            var doc = eval('(' + req.responseText + ')');
            alert(req.responseText);
        }
    } 

当我要展示的内容我用警报(req.responseText); 我没有看到的内容。 另外,我有萤火虫一个语法错误:语法错误:VAR = DOC的eval( '(' + req.responseText + ')');

不可能的JSONP。

我们可以提取网页的内容,然后将其转换成JSON格式然后分析它?

Answer 1:

如果你无法创建自己的代理,你应该使用YQL避免跨域问题。

这里是一个例子URL id=397

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D'http%3A%2F%2F89.92.40.250%3A8010%2Fdreamteam%2Finterface%2Fget_event_detail.php%3Fid%3D397'&format=json&diagnostics=true

你可以动态设置ID这样,

var id = 397;
var baseurl = "http://query.yahooapis.com/v1/public/yql?q=";
var q = "select * from json where url = 'http://89.92.40.250:8010/dreamteam/interface/get_event_detail.php?id="+id+"'";  
var url = baseurl + encodeURI(q) + "&format=json&diagnostics=true";
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.onreadystatechange = monCode;
req.send(null);

function monCode() {
    if (req.readyState == 4) {
        var data = JSON.parse(req.responseText).query.results;
        console.log(data);
        //console.log(data.event);
        alert(data.event.title);
    }
}​

而这里是一个DEMO的jsfiddle

使用限制YQL

  • 每个应用程序的限制(通过您的访问密钥识别):每天100,000电话
  • 每个IP限制:/ V1 /公/:每小时2000调用; / V1 / YQL / 20000个每小时通话


Answer 2:

这是不可能的,由于跨域限制; 你的页面应该在同一台主机上托管。

你可以投资于以下选择:

  • 使用JSONP(可能不会工作你的情况)
  • 使用同一台主机上的服务器端脚本,将拉动该文件的内容(如代理)
  • :看看如何配置跨域存取权限控制https://developer.mozilla.org/En/HTTP_access_control (无论是不太可能适合您的选项)


Answer 3:

既然你正在从127.0.0.1请求89.92.40.250:8010这将是一个跨域请求,这是即使你访问一个不同的端口在同一台机器上像127.0.0.1:8080跨域请求。

如果你有过被89.92.40.250:8010呈现的内容的控制,你可以使用jsonp来解决跨域限制,但它需要在后端的一些变化,或者您可以使用所提供的功能http://jsonp.jit.su /这基本上接触代表您的服务器,创建一个jsonp ,你可以处理响应。



Answer 4:

正如我在评论上面说的,你不能这样做跨域AJAX请求。 浏览器通常禁止这一点。

如果你真的想这样做跨域请求时,有几个选项,一个是代理(配置你的本地网络服务器将请求发送到远程服务器)和其他JSONP )。

JSONP主要在于增加额外的script标记HTML文档,同时使用请求URL为src 。 这允许你绕过跨域安全控制,因为你总是可以包括从其他网站JS资源。 然而,远程服务器必须知道它必须应用的前缀请求(即read_data({ /* JSON response */});否则返回的信息将不被处理。

UPDATE

jQuery的,举例来说,可以透明地处理JSONP,就好像它是一个正常的AJAX请求:

http://api.jquery.com/jQuery.ajax/

即:

$.ajax({url:'http://your/request/url/',
        jsonp: 'your_desired_prefix',
        success: function(result) {
          /* result should hold you JSON data */
        });


文章来源: Cannot access json file with javascript