1、最近用jquery实现局部刷新,数据是经过ruby查询数据库返回,一开始用render :json => result的写法:
result = {
:android_clients=>@query_android_clients,
:ios_clients=>@query_ios_clients,
:wp_clients=>@query_wp_clients,
:all_clients=>@query_all_clients,
:messages=>@query_messages
}
render :json => result
测试发现ff、chrome、ie9等浏览器正常显示,但在ie6、ie7、ie8(兼容版)中无法取出数据(浏览器老是提示对象为空),原来这是因为以上浏览器不支持json格式的数据,网上有资料说用jquery定义的jQuery.parseJSON(tempResult)或者引进道格拉斯写的:https://github.com/douglascrockford/JSON-js/blob/master/json2.js文件可以得到解决,照做以后仍然报错。于是将render :json => result改成了render :xml => result,在视图里面用$(tempResult).find("all_clients").text()方法获取值时,还是取不到值,打印result格式如下:
<hash>
<all-clients type="integer">107</all-clients>
<messages type="integer">1948</messages>
<android-clients type="integer">80</android-clients>
<ios-clients type="integer">24</ios-clients>
<wp-clients type="integer">3</wp-clients>
</hash>
光天化日之下,all_clients被莫名其妙的转换成了all-clients,于是改成$(tempResult).find("all-clients").text()就ok了。
另附页面代码如下:
$(document).ready(function(){
$("#list").click(function(){
var res = "";
var day = $("#client1_ftime1_3i").val();
var month = $("#client1_ftime1_2i").val();
var year = $("#client1_ftime1_1i").val();
var dependence = $("#select1").val();
//client1[ftime1(1i)]是rails的date_select约定写法,timestamp是为了排除浏览器缓存干扰
var url = "http://IPAddress/receive?"+"client1[ftime1(1i)]="+year+"&client1[ftime1(2i)]="+month+"&client1[ftime1(3i)]="+day+"&select1="+dependence+"×tamp="+(new Date()).getTime();
$.get(url,null,function(tempResult){
var android_clients = $(tempResult).find("android-clients").text();
var ios_clients = $(tempResult).find("ios-clients").text();
var wp_clients = $(tempResult).find("wp-clients").text();
$("#search").append("<table id='auto_tab' class='table table-striped table-hover messageList'>"
+"<tr id="+1+">"
+"<th style='width:15%;'>Android</th>"
+"<th style='width:15%;'>IOS</th>"
+"<th style='width:15%;'>WP</th>"
+"</tr>"
+"<tr id="+2+">"
+"<td>"+android_clients+"</td>"
+"<td>"+ios_clients+"</td>"
+"<td>"+wp_clients+"</td>"
+"</tr>"
+"</table>"
);