javascript怎么跨域读取别地服务器上的json 比如这个:http://api.t.sohu.com/statuses/public_timeline.json我想了很多方法都不行,我用的是chrome,firefox我试过服务器上访问然后再到本地,但是速度太慢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看Jquery 的getJson方法是可以的参考http://api.jquery.com/jQuery.getJSON/$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){ $.each(data.items, function(i,item){ $("<img/>").attr("src", item.media.m).appendTo("#images"); if ( i == 3 ) return false; }); }); 如果你不是在搜狐的域名下,必须用js修改浏览器安全设置,才能跨域获取到他的json,而js修改设置会使浏览器跳出窗口告诉用户当前脚本正在修改浏览器安全选项。放弃吧朋友,我也是搞了好久也没有办法,只有用后台流去读然后存数据库 罗嗦一句,jsonp和跨域Ajax是需要后台支持的,各大浏览器都还没有提供安全和有效的跨域Ajax 对了,不知道你是不是搜狐家的,如果是的话,情况就好办了。比如,你当前的域名是talk.sohu.com //是给用户用的聊天等等功能页面但是您在json.sohu.com 里面存储了您所有的返回json格式的数据,那么您是可以通过修改domain方式来读取json数据的。例如talk.sohu.com/index.shtml页面里面的document.domain 是 talk.sohu.com 您将它修改为 sohu.com就可以访问其他的sohu.com域名下的内容document.domain = 'sohu.com';当然,您不用试图将其改为qq.com,那是无效的。也就是,js允许访问您二级域名下的文件,但是不允许访问非自己域名下的文件。对于非自己域名下的文件,还是服务器端脚本读取吧。 动态创建script标签元素就可以了,或者直接<script src ="外域数据源"></script> js 跨域,可以用iframe 或者script 标签我通常用script// 动态导入jsfunction include(src,encoding,fun) { var s = document.createElement('script'); s.type='text/javascript'; s.charset=encoding; //'gb2312'; s.src = src; var tags =document.getElementsByTagName('head'); if(typeof(fun)=='function'){ if( document.all ){ s.onreadystatechange = function(){ if(/(complete|loaded)/.test(this.readyState)){ fun(); s.onreadystatechange = null; s.parentNode.removeChild(s); }}; }else{ s.onload = function(){ fun(); s.onload = null; s.parentNode.removeChild(s); }; } } tags[0].appendChild(s); }; 动态导入js倒无所谓,而且您的代码里涉及到那个document.all后面的parentNode需要改成parentElement(for IE6)。用iframe的话,想要操作iframe里面的页面,同样需要同一域名下,并且修改document.domain而对于楼猪所说的json格式的话,用script标签导入是不现实的。这个试试便知。所以,跨子域名调用 iframe+ajax+document.domain,跨域调用 ajax + 服务器脚本。 跨域读取怎样能不受浏览器权限限制:1. 用 iframe2. 用 div, 然后 jquery load(其他网站 url),把收到的数据内容放到 div 中。只需要一行 javascript 代码: $("#div_id").load("http://blog.csdn.net/jacklondon"); 就搞定。3. 直接用javascript 中的 Ajax ,可以读取别地服务器上的json。同上面 2 一样,但是需要写的代码更多。 这需要你对服务器端做修改:比如服务器端原本的JSON输出数据为:{data:[]}。你本地的JS需要预先定义一个全局的函数:functionname(data){ //exectute data}服务端修改为要接受一个参数,假设参数名称为callback。然后你访问服务端的链接变成了:http://url?callback=functionname服务端返回:functionname( {data:[]} );当你用向DOM插入script节点的方式插入服务端传来的数据时,相当于运行了服务端的一个JS里面的函数。functionname就获得了服务端生成的数据。最后你要记得完成后清除这个DOM节点释放资源。 给你一个例子吧。看来楼主的 javascript 真的不怎么好。<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script><style type="text/css"> div#div_static {width:500px;height:130px;overflow:scroll; border:1px solid;}div#div_test {width:700px;height:300px;overflow:scroll; border:1px solid;}div#div_test_json {width:600px;height:300px;overflow:scroll; border:1px solid;}</style></head><body><div id="div_static">static</div><div id="div_test"></div><div id="div_test_json"></div><script type="text/javascript">$(function(){ $("#div_test").load("http://www.google.com.hk"); $("#div_test_json").load("http://api.t.sohu.com/statuses/public_timeline.json");});</script></body></html> 或许过一段时间,你的js水平上了一个台阶了,你再回来看看你这个帖子里的发言,有另一个感受。总之,你说的方法不可行。你自己研究一下jq的源码,再跨域读取下数据就知道了。 http://topic.csdn.net/u/20101103/17/abd9be35-3860-4252-ab89-0a75e4eb1487.html?seed=1601834559&r=69600084#r_69600084谁去说个话 100分 速度滴~ javascript中用frameset jQuery或LigerUI导致DOM结构混乱的事情大家遇到过吗? js怎么获得一个元素在一个滚动的div里的位置 e.target js to vbs 我想用数组作为函数参数,要怎样写? 在vml中如何正确地显示文字?? 在某输入框中输入回车,如何将焦点移到下一输入框中? 当表格单元格有一下拉菜单(图层),当鼠标在单元格和下拉菜单时,如何改变单元格的颜色? 急!急!急!有关<img>标签中的图片大小控制的问题? Jquery为多级下的标签添加click事件 JS菜鸟急求日期参数拆分
参考http://api.jquery.com/jQuery.getJSON/
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
比如,你当前的域名是
talk.sohu.com //是给用户用的聊天等等功能页面
但是您在
json.sohu.com
里面存储了您所有的返回json格式的数据,那么您是可以通过修改domain方式来读取json数据的。例如
talk.sohu.com/index.shtml页面里面的
document.domain 是 talk.sohu.com
您将它修改为 sohu.com就可以访问其他的sohu.com域名下的内容
document.domain = 'sohu.com';
当然,您不用试图将其改为qq.com,那是无效的。
也就是,js允许访问您二级域名下的文件,但是不允许访问非自己域名下的文件。
对于非自己域名下的文件,还是服务器端脚本读取吧。
动态创建script标签元素就可以了,或者直接<script src ="外域数据源"></script>
我通常用script// 动态导入js
function include(src,encoding,fun)
{
var s = document.createElement('script');
s.type='text/javascript';
s.charset=encoding; //'gb2312';
s.src = src;
var tags =document.getElementsByTagName('head');
if(typeof(fun)=='function'){
if( document.all ){
s.onreadystatechange = function(){
if(/(complete|loaded)/.test(this.readyState)){
fun(); s.onreadystatechange = null; s.parentNode.removeChild(s);
}};
}else{
s.onload = function(){ fun(); s.onload = null; s.parentNode.removeChild(s); };
}
}
tags[0].appendChild(s);
};
动态导入js倒无所谓,而且您的代码里涉及到那个document.all后面的parentNode需要改成parentElement(for IE6)。
用iframe的话,想要操作iframe里面的页面,同样需要同一域名下,并且修改document.domain
而对于楼猪所说的json格式的话,用script标签导入是不现实的。
这个试试便知。
所以,跨子域名调用 iframe+ajax+document.domain,跨域调用 ajax + 服务器脚本。
1. 用 iframe
2. 用 div, 然后 jquery load(其他网站 url),把收到的数据内容放到 div 中。
只需要一行 javascript 代码: $("#div_id").load("http://blog.csdn.net/jacklondon"); 就搞定。
3. 直接用javascript 中的 Ajax ,可以读取别地服务器上的json。同上面 2 一样,但是需要写的代码更多。
比如服务器端原本的JSON输出数据为:{data:[]}。
你本地的JS需要预先定义一个全局的函数:
functionname(data){
//exectute data
}
服务端修改为要接受一个参数,假设参数名称为callback。
然后你访问服务端的链接变成了:
http://url?callback=functionname
服务端返回:
functionname( {data:[]} );当你用向DOM插入script节点的方式插入服务端传来的数据时,相当于运行了服务端的一个JS里面的函数。
functionname就获得了服务端生成的数据。
最后你要记得完成后清除这个DOM节点释放资源。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.3.min.js"></script><style type="text/css">
div#div_static {width:500px;height:130px;overflow:scroll; border:1px solid;}
div#div_test {width:700px;height:300px;overflow:scroll; border:1px solid;}
div#div_test_json {width:600px;height:300px;overflow:scroll; border:1px solid;}</style></head>
<body>
<div id="div_static">static</div>
<div id="div_test"></div>
<div id="div_test_json"></div><script type="text/javascript">$(function(){
$("#div_test").load("http://www.google.com.hk");
$("#div_test_json").load("http://api.t.sohu.com/statuses/public_timeline.json");
});
</script>
</body>
</html>
或许过一段时间,你的js水平上了一个台阶了,你再回来看看你这个帖子里的发言,有另一个感受。
总之,你说的方法不可行。
你自己研究一下jq的源码,再跨域读取下数据就知道了。
谁去说个话 100分 速度滴~