2014-01-15 4 views
2

Я прошу прощения, если очень похож на другие сообщения, но я не могу заставить это работать после работы над ним уже более недели. Наконец, получил webservice для возврата данных, я могу увидеть возвращенные данные, но магазин не загрузит их. За исключением одного случая: когда я создаю ArrayStore и устанавливаю хранилище для загрузкиRawData, я вижу, что весь отклик неверно в сетке, отображаемый по одному столбцу; но просто рады видеть данные. Может кто-то пожалуйста, посмотрите на это и понять, почему мой магазин не загрузки данных и заполнения сетки:extjs ajax магазин вызовов не загружается

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'connTime', type: 'string' }, 
     { name: 'userName', type: 'string' }, 
     { name: 'clientName', type: 'string' }, 
     { name: 'feedUrl', type: 'string' }, 
     { name: 'dconnTime', type: 'string' }, 
     { name: 'errMessage', type: 'string' }, 
     { name: 'ip', type: 'string' } 
    ] 
}); 

var myStore = Ext.create('Ext.data.Store', { 
    model: 'User' 
}); 


Ext.Ajax.request({ 
    url: 'http://dfsdfsfsfs/WCFService/WebService1.asmx/getValue', 
    method: 'GET', 
    success: function (response, options) { 
     var s = response.responseText; 
     Ext.MessageBox.alert(s, 'WOO WOO'); 
     myStore.loadData(s); 
    }, 
    failure: function (response, options) { 
     Ext.MessageBox.alert('FAILED MF', 'Unable to GET'); 
    } 
}); 



    var grid = Ext.create('Ext.grid.Panel', { 
    store: myStore, 
    stateful: true, 
    stateId: 'stateGrid', 
    columns: [ 
     { 
      text: 'Query', 
      width: 25, 
      sortable: false, 
      dataIndex: 'userName' 
     }, 
     { 
      text: 'Count', 
      width: 5, 
      sortable: true, 
      renderer: change, 
      dataIndex: 'ip' 
     }, 
     { 
      text: 'Last Updated', 
      width: 76, 
      sortable: true, 
      dataIndex: 'connTime' 
     }, 
     { 
      text: 'Disconnect Time', 
      width: 10, 
      sortable: true, 
      renderer: change, 
      dataIndex: 'dconnTime' 
     }, 
     { 
      text: 'Client', 
      width: 10, 
      sortable: true, 
      renderer: change, 
      dataIndex: 'clientName' 
     } 

    ], 
    height: 350, 
    width: 800, 
    title: 'Active Queries', 
    renderTo: 'grid-example', 
    viewConfig: { 
     stripeRows: true 
    } 
}); 

.....

Я даже попробовал другой способ сделать это и с это один я даже не вижу ответ АЯКС вернулся:

var newStore = Ext.create('Ext.data.ArrayStore', { 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url: 'http://dfsdfsfsfs/WCFService/WebService1.asmx/getValue', 
     reader: { 
      type: 'json', 
      root: 'd', 
      successProperty: 'success' 
     }, 
     success: function (response, options) { 
      var s = response.responseText; 
      Ext.MessageBox.alert(s, 'LA LA LA'); 
      newStore.loadData(s); 
     }, 
     failure: function (response, options) { 
      Ext.MessageBox.alert('FAILED AGAIN', 'SUCKS'); 
     } 
    } 
}); 

EDIT:

ответ сервера:

{"d":{"connTime":null,"userName":"101591196589145","clientName":null, 
    "feedUrl":null,"dconnTime":null,"errMessage":null,"ip":null}} 

«d» корень был добавлен мной вручную и не существует в исходном webresponse. Я захватить его и добавить корень:

{"connTime":null,"userName":"101591196589145","clientName":null,"feedUrl":null, 
"dconnTime":null,"errMessage":null,"ip":null}} 

EDIT 2:

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'value', type: 'string' }, 
     { name: 'tag', type: 'string' } 
    ] 
}); 


var newStore = new Ext.data.JsonStore({ 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url: 'http://localhost:52856/WCFService/WebService1.asmx/getRules', 
     reader: { 
      type: 'json', 
      root: 'rules', 
      idProperty: 'value'     
     }, 
     success: function (response, options) { 
      var s = response.responseText; 
      Ext.MessageBox.alert(s, 'LA LA LA'); 
      newStore.loadData(s); 
     }, 
     failure: function (response, options) { 
      Ext.MessageBox.alert('FAILED AGAIN', 'SUCKS'); 
     } 
    } 
}); 

    var grid = Ext.create('Ext.grid.Panel', { 
    store: newStore, 
    stateful: true, 
    columns: [ 

Вот новый JSON Я пытаюсь:

{"rules":[{"value":"101591196589145","tag":"16"}, 
{"value":"102890809752267","tag":"16"},  
{"value":"107821192690513","tag":"16"}, {"value":"111517428886211","tag":"16"}, 
{"value":"117389718398171","tag":"16"},{"value":"12099149051","tag":"16"}, 

ОК я обнаружил, что может быть проблема с вызов ext.ajax.request. Во время выполнения запроса хранилище даже не определено и, следовательно, данные не загружаются. Как я могу пройти мимо этого?

+0

Правильный способ сделать это - объявить прокси-сервер в магазине и загрузить хранилище. Как выглядит ваш ответ сервера? –

ответ

2

Здесь я приведу вам пример, просто сравните с вашим кодом.

// defining a model 
Ext.define('SampleModel', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'YOUR_ID', type: 'int'}, 
     {name: 'YOUR_NAME', type: 'string'} 
    ] 
}); 

// defining a store 
var storeDefinition = new Ext.data.JsonStore({ 
    model: 'SampleModel', 
    proxy: { 
     type: 'ajax', 
     url: '/your/url/path/data.php', 
     reader: { 
      // you MUST define root and idProperty 
      type: 'json', 
      root: 'rootList', 
      idProperty: 'YOUR_ID' 
     } 
    } 
}); 

Вот важные части root и idProperty. Как вы указали, root является корневым узлом объекта json. idProperty - уникальный идентификатор объекта json.

Чтобы поймать success и failure ответ, вы должны вернуть success или failure данных внутри объекта JSON. Нет необходимости указывать success недвижимость в разделе reader. Например;

public function dnr_info() 
{ 
    $dnr = $this->input->get('dnr', TRUE); 
    $subsys = $this->input->get('subsys', TRUE); 
    $data['success'] = TRUE; 
    $data['data'] = $this->dnr->get_dnr_info($dnr, $subsys); 
    echo json_encode($data); 
} 

Выше функция возвратит success свойства объекта JSon.

И вот возвращаемый объект json с сервера.

{"success":true,"data":{"SUBSYS_ART_NR":"136451","ART_NR":"459993","ACTION_DESC":"BAKKAL AKT\u0130V\u0130TES\u0130 (176)","ACTIONS_NR":"130012676","START_DATE":"19.12.2013","STOP_DATE":"16.01.2014","DISCOUNT_TYPE":"SPECIAL PRICE","LEVEL_TYPE":"QUANTITY","LEVEL_IMPACT":"MULTIPLE","BASIS":"ARTICLE","LEVEL_1":"1 ADET","VALUE_1":"5,92","NWW_VK_PREIS":"6.69","KOLLI_VK_PREIS":"6.69"}} 
// here is the another sample for root which is articleList, idProperty which is ARTICLE_ID 
{"articleList":[{"ARTICLE_ID":"193","ART_NR":"225","ART_DESC":"27*1\/5LT.M.NEK.TAMEK.","SORTEN_TEXT":"ELMA","VAR":"1","GEBI":"1","SUBSYS_ART_NR":"225","NWW_VK_PREIS":"14.49","KOLLI_VK_PREIS":"14.49","DNR_ID":null,"STATUS":"0"}, 
+0

Большое спасибо за подробный анализ. Я изменил свой код на простой пример, используя ваш в качестве шаблона, и все равно ничего. Используя скрипач, я вижу, что веб-сервис даже не вызывается. – vbNewbie

+0

, вы думаете, что это имеет какое-то отношение к асинхронным вызовам, что веб-служба возвращает данные, но хранит их не созданные во времени. – vbNewbie

+0

Я использовал скрипач и из того, что я вижу, это то, что URL-адрес даже не вызван; но это действительно, если я вставляю в браузер – vbNewbie

1

Не совсем уверен, как вы получили себя в таком состоянии. Существует множество примеров загрузки сетки в загрузку SDK. Прокси не имеет метода отказа/успеха.

Fiddle here. Рабочий код:

Ext.onReady(function() { 

    Ext.define('User', { 
     extend: 'Ext.data.Model', 
     fields: [{ 
      name: 'value', 
      type: 'string' 
     }, { 
      name: 'tag', 
      type: 'string' 
     }] 
    }); 


    var store = new Ext.data.Store({ 
     model: 'User', 
     proxy: { 
      type: 'ajax', 
      url: 'data.json', 
      reader: { 
       type: 'json', 
       root: 'rules' 
      } 
     } 
    }); 
    store.load(); 

    var grid = new Ext.grid.Panel({ 
     renderTo: Ext.getBody(), 
     width: 400, 
     height: 400, 
     store: store, 
     columns: [{ 
      text: 'Value', 
      dataIndex: 'value', 
      flex: 1 
     }, { 
      text: 'Tag', 
      dataIndex: 'tag' 
     }] 
    }); 
}); 
+0

Спасибо за ваш ответ. Я решил, наконец, сосредоточиться на фактическом веб-сервисе после использования вашей ссылки и обнаружил, что это должен быть веб-сервис, поскольку он по-прежнему возвращает содержимое, заключенное в , хотя это похоже на json , Я изменил contentType на json, но до сих пор не понял. Но по крайней мере это устраняет проблемы с кодом для extjs. Спасибо за дополнительные советы. – vbNewbie

+0

Не может помочь вам дальше. Удачи. –

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