我想读这个页面的内容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格式然后分析它?
如果你无法创建自己的代理,你应该使用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个每小时通话
这是不可能的,由于跨域限制; 你的页面应该在同一台主机上托管。
你可以投资于以下选择:
- 使用JSONP(可能不会工作你的情况)
- 使用同一台主机上的服务器端脚本,将拉动该文件的内容(如代理)
- :看看如何配置跨域存取权限控制https://developer.mozilla.org/En/HTTP_access_control (无论是不太可能适合您的选项)
既然你正在从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
,你可以处理响应。
正如我在评论上面说的,你不能这样做跨域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 */
});