結貼說明: 很感謝sp1234等人的熱心幫忙和提醒,現在我主要說明下問題所在: 首先我在獨立的js文件中,直接把測試數據loaddata進去datagrid是沒有問題的。
var kk = {"total":2,"rows":[{"INSTANCE_ID":"BI00000011","BUSINESS_NAME":"專項檢查文檔資料報送","INSTANCE_STATUS":"hello正在辦文處理中","JBR":"hello","DO_DATE":"2015/1/31 20:15:36","EXPIRE_DATE":"2015/2/1 20:15:36","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:15:36","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000033"},{"INSTANCE_ID":"BI00000012","BUSINESS_NAME":"專項檢查文檔資料報送","INSTANCE_STATUS":"hello正在辦文處理中","JBR":"hello","DO_DATE":"2015/1/31 20:59:59","EXPIRE_DATE":"2015/2/1 20:59:59","CREATOR":"hello","CREATE_DATE":"2015/1/31 20:59:59","DELETOR":"","DELETE_DATE":"","CURRENTDO_USER_ID":"UE000235","EXCHANGE_ID":"BI00000034"}]}
$("#divcasebox").datagrid("loadData", eval(kk));
在獨立頁面處理上面過程是不會報錯的,但是經過后台調用傳過來data后,就報錯了,經過上網查詢,發現問題所在就是后台傳過來的是字符串,而不是json對象,也即是說對於服務器返回的JSON字符串,如果jquery異步請求沒做類型說明,那就以字符串方式接受,那么需要做一次對象化處理,即將字符串放在eval()中執行一次。但是這里又引發了另外一個問題:字符串直接用eval(string)是報錯的,直接報錯說缺少“;”。這個就是eval本身的問題,由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式,因此要使用var dataObj=eval("("+data+")")這樣才能轉換成json對象,為什么這里要加上圓括號呢?是因為加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執行了一句空語句。 所以,問題到此已經弄明白了,就是格式的問題,由於考慮到用eval()效率不高,而且在個別瀏覽器中會報錯,所以本次我采用的字符串轉換json的方法使用JSON.parse(string)。所以最后我的加載數據的函數如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
function
CaseBoxLoadData() {
$.ajax({
type:
"Post"
,
url:
"GXOAServer.asmx/TodoBoxLoadData"
,
//async: false, //true:異步,false:同步
data: {},
//contentType: false,
//processData: false,
success:
function
(data) {
var
jsondata = JSON.parse(data.text);
$(
"#divcasebox"
).datagrid(
"loadData"
, jsondata);
},
error:
function
(err) {
alert(
"error"
);
}
});
|
