2012-03-11 54 views
2

我正在加載來自web服務的值,但我得到以下錯誤消息。 ChatStore.data.items [i]未定義。對於ExtJS的如何在extjs中加載json

映射代碼

ChatStore = new Ext.data.JsonStore({ 
     storeId: 'ChatStore1', 
     fields: [ 
        {name: "pic_url", mapping: "sender_pic_url"}, 
        {name: "first_name", mapping: "first_name"}, 
        {name: "last_name", mapping: "last_name"}, 
        {name: "message_text", mapping: "message_text"}, 
        {name: "time", mapping: "time"} 

       ]   

    }); 

從web服務加載數據的代碼

Ext.Ajax.request({ 
     url: 'webservice call', 
     params: Ext.encode('{"sender_user_id":"' + suid + '","receiver_user_id":"' + ruid + '"}'), 
     headers: { 'Content-type': 'application/json;charset=utf-8' }, 
     success: function (result, request) { 

      retData = (result.responseText); 
      alert(retData); 
      retData = eval("(" + retData + ")"); 
      if (retData.status == 'success') { 


       //ChatStore.loadData(retData.result.messages); 
       //ChatStore.loadData(retData.result); 
       for (var i = 0; i < retData.result.messages.length; i++) { 
        if (retData.result.messages[i].message_from == "YES") { 

         ChatStore.data.items[i].data.pic_url = retData.result.sender_pic_url; 
         ChatStore.data.items[i].data.first_name = retData.result.sender_name; 


        } 
        else { 
         ChatStore.data.items[i].data.pic_url = retData.result.receiver_pic_url; 
         ChatStore.data.items[i].data.first_name = retData.result.reciever_name; 
        } 

        ChatStore.data.items[i].data.message_text = retData.result.messages[i].message_text; 
        ChatStore.data.items[i].data.time = retData.result.messages[i].time; 

       } 
       // ChatPanel.render('divchat'); 

       messagePanel.hide(); 
       ChatPanel.show(); 
      } 


      else { alert('error loading first radius'); } 

     }, 
     failure: function (result, request) { 

      alert("Error: " + result.statusText); 
     } 

     }); 
return false; 
} 

我的web服務的結果是:-----

{ 
    "status": "success", 
    "message": "Messages are listing below", 
    "result": { 
     "sender_name": "Paul", 
     "reciever_name": "Clay", 
     "sender_pic_url": "Images/f1.jpg", 
     "receiver_pic_url": "Images/f2.jpg", 
     "messages": [ 
      { 
       "message_from": "YES", 
       "message_text": "hi, how r u?", 
       "time": "12:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "hi, where are you?", 
       "time": "1:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "Dear, you are invited for the meeting", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "YES", 
       "message_text": "hi, how r u?", 
       "time": "12:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "hi, where are you?", 
       "time": "1:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "Dear, you are invited for the meeting", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "Ya ill be there", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "at what time party starts", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "YES", 
       "message_text": "6Oclock in the evening", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "NO", 
       "message_text": "Who will the chief guest", 
       "time": "2:00am" 
      }, 
      { 
       "message_from": "YES", 
       "message_text": "our city mayor", 
       "time": "2:00am" 
      } 
     ] 
    } 
} 

我不知道在哪裏事情出錯了。

回答

0

您不能只將項目分配給store.items數組。首先它是未定義的。其次,這是不正確的做法。

你需要或者在店裏指定的Json代理對象,然後存儲會自動加載本身,所有項目將無需任何特殊代碼來填充,或者

您需要使用store.add()函數添加新商品到商店。

從你的代碼看起來像你正在使用store.load()方法,不是嗎?你可以發佈更多的代碼,如何加載數據,以及你如何與服務器通信。

+0

感謝..我upadate我的代碼在這裏... 我與調試器ChatStore.data.items測試[I] .data.pic_url此得到正確的值,但我不知道如何在商店加載... – rash111 2012-03-11 13:28:11

+0

唐不需要做這一切。檢查商店的代理屬性。這是您指定您具有Json代理和URL到您的服務器的位置。然後,您只需調用store.load(),它將自行完成Ajax請求,並自動在商店中獲取數據。 – sha 2012-03-11 13:59:54

+0

我知道store.load方法,但我一次獲得pic_url和名稱,我必須映射sender_pic和接收器pic並在11時間在dataview中使用。即基於web服務 – rash111 2012-03-11 14:01:58