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>"
);