开发者社区> 问答> 正文

帮忙看下这段代码,研究了一整天也搞不懂。 400 请求出错 

我用$.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

展开
收起
kun坤 2020-05-25 20:37:07 694 0
1 条回答
写回答
取消 提交回答
  • "

    兄弟,确实编码问题、当我为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);					
    	})()

    ######代码都是直接粘贴的。我看不出哪不对。######

    引用来自“Beyond-Bit”的答案

    楼主我测试了一下,完全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 , 
    ######有什么区别吗?var city = '\u6DF1\u5733';还是不行"
    2020-05-26 13:15:16
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Android插件化-从入门到"放弃" 立即下载
数据+算法定义新世界 立即下载
代码未写,漏洞已出——谈谈设计不当导致的安全问题 立即下载