高分求救,服务端返回json问题,总是提示“invalid label”,大家帮帮忙! 本帖最后由 zohong 于 2010-08-20 15:17:04 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在Firebug中可以看到响应数据,但是提示错误“invalid label”响应数据为:‘{"weatherinfo":{"city":"北京","city_en":"beijing","date_y":"2010年8月20日","date":"庚寅年七月十一","week":"星期五","fchh":"11","cityid":"101010100","temp1":"31℃~22℃","temp2":"26℃~20℃","temp3":"28℃~22℃","temp4":"30℃~21℃","temp5":"29℃~20℃","temp6":"25℃~18℃","tempF1":"87.8℉~71.6℉","tempF2":"78.8℉~68℉","tempF3":"82.4℉~71.6℉","tempF4":"86℉~69.8℉","tempF5":"84.2℉~68℉","tempF6":"77℉~64.4℉","weather1":"多云转阵雨","weather2":"阵雨转小到中雨","weather3":"阴转多云","weather4":"多云","weather5":"多云","weather6":"多云转中雨","img1":"1","img2":"3","img3":"3","img4":"21","img5":"2","img6":"1","img7":"1","img8":"99","img9":"1","img10":"99","img11":"1","img12":"8","img_single":"1","img_title1":"多云","img_title2":"阵雨","img_title3":"阵雨","img_title4":"小到中雨","img_title5":"阴","img_title6":"多云","img_title7":"多云","img_title8":"多云","img_title9":"多云","img_title10":"多云","img_title11":"多云","img_title12":"中雨","img_title_single":"多云","wind1":"微风","wind2":"微风","wind3":"微风","wind4":"微风","wind5":"微风","wind6":"微风","fx1":"微风","fx2":"微风","fl1":"小于3级","fl2":"小于3级","fl3":"小于3级","fl4":"小于3级","fl5":"小于3级","fl6":"小于3级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"热","index48_d":"天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。","index_uv":"中等","index48_uv":"弱","index_xc":"不宜","index_tr":"适宜","index_co":"较不舒适","st1":"31","st2":"21","st3":"22","st4":"19","st5":"30","st6":"22","index_cl":"适宜","index_ls":"适宜"}}’ 格式有问题[{city:"values",weatherinfo:"values"}] $.getJSON("/Service/ObtainHouseSource.html", { "x1": x1, "x2": x2, "y1": y1, "y2": y2, }, function(data) { $.each(data, function(i, item) {alert(item.LocationLat); }); });js端 var josn=eval(data); for (var i = 0; i < json.weatherinfo.length; i++){ alert(json.JsonData[i].name);}这样你试试 var josn=eval(data); for (var i = 0; i < json.weatherinfo.length; i++){ alert(json.weatherinfo[i].name);}这样你试试 var josn=eval(data); for (var i = 0; i < json.weatherinfo.length; i++){ alert(json.weatherinfo[i].city);}最后个对的吧,这是JS的写法, 是格式问题json :{"weatherinfo":[{"city":"北京","city_en":"beijing","date_y":"2010年8月20日","date":"庚寅年七月十一","week":"星期五","fchh":"11",...},{......}] 在firebug中转换可以的用eval('(json字符串)');//返回object---------->>> eval('({"weatherinfo":{"city":"北京","city_en":"be...st6":"22","index_cl":" 不宜","index_ls":"不宜"}})');Object { weatherinfo=Object}-------------用eval('[json字符串]');//返回array--------->>> eval('[{"weatherinfo":{"city":"北京","city_en":"be...st6":"22","index_cl":" 不宜","index_ls":"不宜"}}]');[Object { weatherinfo=Object}] 还没等我处理数据的时候,就提示了“invalid label”这个错误。就是那个代码,我要怎么该一下他就不会出这个错了。高手帮忙动个手术,服务端改不了,是中国天气网的数据。。 我知道答案。跨域不是这样的,你这个肯定不能实现。你打开 细读 json 官方文档后,翻到最后,你会发现这么一段: JSON数据是一种能很方便通过JavaScript解析的结构化数据。如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数。 其实jquery跨域的原理是通过外链 <script> 来实现的,然后在通过回调函数加上回调函数的参数来实现真正的跨域 Jquery 在每次跨域发送请求时都会有callback这个参数,其实这个参数的值就是回调函数名称,所以,服务器端在发送json数据时,应该把这个参数放到前面,这个参数的值往往是随机生成的,如:jsonp1294734708682,同时也可以通过 $.ajax 方法设置 callback 方法的名称。明白了原理后,服务器端应该这样发送数据:string message = "jsonp1294734708682({\"userid\":0,\"username\":\"null\"})";这样,json 数据 {\"userid\":0,\"username\":\"null\"} 就作为了 jsonp1294734708682 回调函数的一个参数所以,跨域的页面,你也要能控制啊。 关于《JavaScript语言精粹》中的原型继承问题 JavaScript面向对象里面的类应该如何写?谁帮我看下这段程序为什么跑不起来 JavaScript函数调用 含双引号 clearTimeout的函数作用域问题 有个非常难的有关于SESSION的问题 简单的代码,为什么出错? 如何用javascript 实现右键级连菜单?? 帮我看看这段jquery代码,错在哪里 在分窗体中,如何在A中点击一个按钮是B刷新啊? 请问如何实现一个组合框且在组合框中包含一棵树呢???可分开回答或讨论。 唉,FF和IE真的让人头痛 js获取xml子节点里的值。
响应数据为:‘{"weatherinfo":{"city":"北京","city_en":"beijing","date_y":"2010年8月20日","date":"庚寅年七月十一","week":"星期五","fchh":"11","cityid":"101010100","temp1":"31℃~22℃","temp2":"26℃~20℃","temp3":"28℃~22℃","temp4":"30℃~21℃","temp5":"29℃~20℃","temp6":"25℃~18℃","tempF1":"87.8℉~71.6℉","tempF2":"78.8℉~68℉","tempF3":"82.4℉~71.6℉","tempF4":"86℉~69.8℉","tempF5":"84.2℉~68℉","tempF6":"77℉~64.4℉","weather1":"多云转阵雨","weather2":"阵雨转小到中雨","weather3":"阴转多云","weather4":"多云","weather5":"多云","weather6":"多云转中雨","img1":"1","img2":"3","img3":"3","img4":"21","img5":"2","img6":"1","img7":"1","img8":"99","img9":"1","img10":"99","img11":"1","img12":"8","img_single":"1","img_title1":"多云","img_title2":"阵雨","img_title3":"阵雨","img_title4":"小到中雨","img_title5":"阴","img_title6":"多云","img_title7":"多云","img_title8":"多云","img_title9":"多云","img_title10":"多云","img_title11":"多云","img_title12":"中雨","img_title_single":"多云","wind1":"微风","wind2":"微风","wind3":"微风","wind4":"微风","wind5":"微风","wind6":"微风","fx1":"微风","fx2":"微风","fl1":"小于3级","fl2":"小于3级","fl3":"小于3级","fl4":"小于3级","fl5":"小于3级","fl6":"小于3级","index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。","index48":"热","index48_d":"天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。","index_uv":"中等","index48_uv":"弱","index_xc":"不宜","index_tr":"适宜","index_co":"较不舒适","st1":"31","st2":"21","st3":"22","st4":"19","st5":"30","st6":"22","index_cl":"适宜","index_ls":"适宜"}}’
{
$.each(data, function(i, item)
{
alert(item.LocationLat);
});
});
js端
var josn=eval(data);
for (var i = 0; i < json.weatherinfo.length; i++)
{
alert(json.JsonData[i].name);
}这样你试试
var josn=eval(data);
for (var i = 0; i < json.weatherinfo.length; i++)
{
alert(json.weatherinfo[i].name);
}这样你试试
var josn=eval(data);
for (var i = 0; i < json.weatherinfo.length; i++)
{
alert(json.weatherinfo[i].city);
}最后个对的吧,这是JS的写法,
{"weatherinfo":[{"city":"北京","city_en":"beijing","date_y":"2010年8月20日","date":"庚寅年七月十一","week":"星期五","fchh":"11",...},{......}]
在firebug中转换可以的
用eval('(json字符串)');//返回object
----------
>>> eval('({"weatherinfo":{"city":"北京","city_en":"be...st6":"22","index_cl":" 不宜","index_ls":"不宜"}})');
Object { weatherinfo=Object}
-------------
用eval('[json字符串]');//返回array
---------
>>> eval('[{"weatherinfo":{"city":"北京","city_en":"be...st6":"22","index_cl":" 不宜","index_ls":"不宜"}}]');
[Object { weatherinfo=Object}]
还没等我处理数据的时候,就提示了“invalid label”这个错误。就是那个代码,我要怎么该一下他就不会出这个错了。高手帮忙动个手术,服务端改不了,是中国天气网的数据。。
你打开 细读 json 官方文档后,翻到最后,你会发现这么一段: JSON数据是一种能很方便通过JavaScript解析的结构化数据。如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置$.ajax()的jsonp参数。 其实jquery跨域的原理是通过外链 <script> 来实现的,然后在通过回调函数加上回调函数的参数来实现真正的跨域 Jquery 在每次跨域发送请求时都会有callback这个参数,其实这个参数的值就是回调函数名称,所以,服务器端在发送json数据时,应该把这个参数放到前面,这个参数的值往往是随机生成的,如:jsonp1294734708682,同时也可以通过 $.ajax 方法设置 callback 方法的名称。明白了原理后,服务器端应该这样发送数据:string message = "jsonp1294734708682({\"userid\":0,\"username\":\"null\"})";这样,json 数据 {\"userid\":0,\"username\":\"null\"} 就作为了 jsonp1294734708682 回调函数的一个参数所以,跨域的页面,你也要能控制啊。