(轉帖)關於easyui中的datagrid在加載數據時候報錯:無法獲取屬性"Length"的值,對象為null或未定義


結貼說明: 很感謝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)。所以最后我的加載數據的函數如下:

JavaScript code
 
?
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" );
        }
    });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM