extjs Ajax Call Store не загружается
Я заранее извиняюсь, если очень похож на другие посты, но я не могу заставить это работать, работая над ним уже больше недели. Наконец, получил веб-сервис для возврата данных, я вижу возвращенные данные, но хранилище не загружает их. За исключением одного случая: когда я создаю ArrayStore и устанавливаю хранилище в loadRawData, я вижу некорректно весь ответ в сетке, отображаемый в одном столбце; но просто рад видеть данные. Может кто-нибудь взглянуть на это и понять, почему мой магазин не загружает данные и не заполняет сетку:
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
}
});
.....
Я даже попробовал другой способ сделать это, и с этим я даже не вижу ответ ajax:
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');
}
}
});
РЕДАКТИРОВАТЬ:
Ответ сервера:
{"d":{"connTime":null,"userName":"101591196589145","clientName":null,
"feedUrl":null,"dconnTime":null,"errMessage":null,"ip":null}}
Корень "d" был добавлен мной вручную, и его нет в оригинальном веб-ответе. Я фиксирую это и добавляю рут:
{"connTime":null,"userName":"101591196589145","clientName":null,"feedUrl":null,
"dconnTime":null,"errMessage":null,"ip":null}}
РЕДАКТИРОВАТЬ 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. В то время как запрос сделан, хранилище даже не определено, и, следовательно, данные не загружаются. Как я могу пройти это?
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"},
Не совсем уверен, как вы попали в такое состояние. Существует множество примеров загрузки сетки в загрузке SDK. Прокси не имеет метода сбой / успех.
Скрипка здесь Рабочий код:
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'
}]
});
});