2012-03-11 3 views
2

Я загружаю значения, исходящие из веб-службы, но я получаю следующее сообщение об ошибке. ChatStore.data.items [i] не определен.Как загрузить json в extjs

Mapping код ExtJS является

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"} 

       ]   

    }); 

код для загрузки данных из веб-сервиса

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; 
} 

Мой результат вебсервис является: -----

{ 
    "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

спасибо .. i upadate мой код здесь ... Я протестирован с отладчиком ChatStore.data.items [i] .data.pic_url это получить правильное значение, но я не знаю, как загрузить в магазине ... – rash111

+0

Don Не нужно делать все это. Проверьте свойство прокси для магазина. Здесь вы указываете, что у вас есть прокси-сервер Json и URL-адрес на вашем сервере. Затем вы просто вызываете store.load(), и он сам сделает запрос Ajax, и вы автоматически получите свои данные в магазине. – sha

+0

Я знаю метод store.load, но я получаю pic_url и имя за один раз, и мне нужно сопоставить с sender_pic и pic pic и использовать в dataview в 11 раз. I.e на основе webservice – rash111

Смежные вопросы