我用$.getScript()跨域请求天气信息,返回:
(function(){
var w = [];
w['深圳']=[
{
s1:'多云',
s2:'多云',
f1:'duoyun',
f2:'duoyun',
t1:'32',
t2:'25',
p1:'≤3',
p2:'≤3',
d1:'无持续风向',
d2:'无持续风向'
},
{
s1:'多云',
s2:'多云',
f1:'duoyun',
f2:'duoyun',
t1:'32',
t2:'25',
p1:'≤3',
p2:'≤3',
d1:'无持续风向',
d2:'无持续风向'
},
{
s1:'阵雨',
s2:'阵雨',
f1:'zhenyu',
f2:'zhenyu',
t1:'32',
t2:'25',
p1:'≤3',
p2:'≤3',
d1:'无持续风向',
d2:'无持续风向'
}
];
var add = {
now : '2013-09-17 14:57:40',
time : '1379401060',
update:'北京时间09月17日08:00更新',
error:'0',
total:'1'
};
window.SWther = {
w : w,
add : add
};
})();//0
代码已经执行。
var city = '深圳'
输出 window.SWther.w[city][0].s1
提示
window.SWther.w[city] is undefined 但是输出 window.SWther.add.now 却正常。
换成同域请求或者直接粘贴返回的代码又可以正常输出window.SWther.w[city]
伤脑筋啊 会不会是什么编码的问题?我用的是utf-8
"
兄弟,确实编码问题、当我为ANSI编码,GBK,GB2312等都是完全正确、
唯独UTF-8的时候日期能显示、天气不能显示、天气恰好是中文、建议你和sina的编码保持一致即可、
ps:你能判断到编码问题上,为何不写个编码下测试一下,问题不就出来了嘛、
######我老想着是返回的编码有问题 ,不知道怎么改。@narky说对了,url后面加&charset=utf-8就不用改本地文档了。######我新建了个文档,ANSI还真是。######我拜托你。。。基本的数据类型w定义的就错了好不好。。。
var w = {} ;
其他的都没什么问题,要是不行你找我~
w['深圳']这样取值,不是对数组,你如果略懂json,应该就能理解的啊。。。
######回复 @JokerTheGreat : json是可以由数组开始的,w的定义并没有错######回复 @JFree : 但是同样这段代码,我保存在本地时没有任何问题。做跨域请求回来取到的window.SWther.w长度为零.我怀疑是编码的问题。 http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city=深圳&dfc=3 这个是请求地址你帮忙做下实验。谢谢了。我都郁闷一整天了。######回复 @JokerTheGreat : 你做循环取值,观察下返回的w值的内部结构,然后在取你想要的值。如果是数组,那肯定不能直接就w['xx']取值了。var w = {xx:'bb'} ;才可以w['xx']######大哥,上面的代码是新浪返回的啊,我修改不了。 w是数组啊,w['键名'] 这样不对吗?######楼主我测试了一下,完全ok、仔细检查你的代码,格式是否正确、我的测试结果
(function(){ var w =[]; w['深圳']=[ { s1:'多云', s2:'多云', f1:'duoyun', f2:'duoyun', t1:'32', t2:'25', p1:'≤3', p2:'≤3', d1:'无持续风向', d2:'无持续风向' }, { s1:'多云', s2:'多云', f1:'duoyun', f2:'duoyun', t1:'32', t2:'25', p1:'≤3', p2:'≤3', d1:'无持续风向', d2:'无持续风向' }, { s1:'阵雨', s2:'阵雨', f1:'zhenyu', f2:'zhenyu', t1:'32', t2:'25', p1:'≤3', p2:'≤3', d1:'无持续风向', d2:'无持续风向' } ]; var city = '深圳'; //alert(w[city][2].s1); window.SWther = { w : w }; alert(window.SWther.w[city][2].s1); })()######代码都是直接粘贴的。我看不出哪不对。######
楼主我测试了一下,完全ok、仔细检查你的代码,格式是否正确、我的测试结果
下面是我打的代码:
$(document).ready(function (){ var city = '深圳'; $.getScript("http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city="+city+"&dfc=3",function(){ alert(window.SWther.add.now);//正常输出 alert(window.SWther.w[city][0].s1);//提示未定义 }) });
下面是直接粘贴新浪返回的天气代码(可以正常输出):
(function(){var w=[];w['深圳']=[{s1:'多云',s2:'多云',f1:'duoyun',f2:'duoyun',t1:'32',t2:'25',p1:'≤3',p2:'≤3',d1:'无持续风向',d2:'无持续风向'},{s1:'多云',s2:'多云',f1:'duoyun',f2:'duoyun',t1:'32',t2:'25',p1:'≤3',p2:'≤3',d1:'无持续风向',d2:'无持续风向'},{s1:'阵雨',s2:'阵雨',f1:'zhenyu',f2:'zhenyu',t1:'32',t2:'25',p1:'≤3',p2:'≤3',d1:'无持续风向',d2:'无持续风向'}];var add={now:'2013-09-17 16:42:15',time:'1379407335',update:'北京时间09月17日08:00更新',error:'0',total:'1'};window.SWther={w:w,add:add};})();//0 $(document).ready(function (){ var city = '深圳'; alert(window.SWther.add.now); alert(window.SWther.w[city][0].s1); });
我在本地测试也是没有问题的。
注意把返回的多余的回车全部去掉
######你在跨域请求时没有问题吗?你帮忙试一下,拜托了。 请求地址: http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city=深圳&dfc=3######
哥们。我刚刚又跨域测试了一次。还是木问题、
结果如下:第一次alert
第二次alert:
代码如下:
$(document).ready(function (){ var city = '深圳'; $.getScript("http://php.weather.sina.com.cn/iframe/index/w_cl.php?code=js&day=2&city="+city+"&dfc=3",function(){ alert(window.SWther.add.now); alert("Hello sina weather------------"+window.SWther.w[city][0].s1); }) });
完全正确啊、
######..........这是不是代表我人品不行?用的编码是utf-8吗??深受打击啊。。######谁能告诉我是不是编码的问题? ######回复 @JokerTheGreat : 小事一桩,不用客气######回复 @Narky : 兄弟 ,还是你厉害啊。我差点就扔了这破天气了。非常感谢你。######确实是编码问题,默认是GBK。你可以在url后面加上&charset=utf-8,就可以支持utf-8,测试过OK######偶也测试了下,的确utf-8不行,为什么加了&charset=utf-8就ok呢?######加&charset=utf-8新浪就返回utf-8编码的数据啦。新浪默认应该是gbk。######我补一点哈, 其实可以试着把你脚本里的中文转成 Unicode ,版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。