Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2012, 23:43
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Проблема с выводом xml в грид
Делаю по этому примеру: http://deloy-dev.com/extJS_4.0/ext-4...ml-grid_1.html

Ext.require([
    'Ext.data.*',
    'Ext.grid.*'
]);
Ext.application({

	name: 'name',
	launch: function() {
		Ext.define('Contacts',{
			extend: 'Ext.data.Model',
			fields: [
				'id','mail','name'
			]
		});
		var store = Ext.create('Ext.data.Store', {
			model: 'Contacts',
			autoLoad: true,
			proxy: {
				type: 'ajax',
				url: 'http://localhost:8080/jersey/rest/contacts/',
				reader: {
					type: 'xml',
					record: 'contact',
					idProperty: 'id'
				}
			}
		});
		var xmlGrid = Ext.create('Ext.grid.Panel', {
			store: store,
			columns: [
				{text: "id",width:50, dataIndex: 'id', sortable: true},
				{text: "mail",flex:1, dataIndex: 'mail', sortable: true},
				{text: "name", width: 125, dataIndex: 'name', sortable: true}
			],
			renderTo: Ext.getBody(),
			width: 550,
			height: 200
		});
	}
});


В результате выводится пустой грид. xml по урл http://localhost:8080/jersey/rest/contacts/ в браузер выдаётся.
Интересный момент: если в firebug посмотреть переменную store -свойство proxy - свойство reader, то видно следующее: Object { type="json", superclass={...}, config={...}, ещё...}

Тип данных определён как json. Похоже на то, что причина в этом. Как это исправить?
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2012, 21:52
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Ну, сложно сказать в чем проблема, не зная какой xml в ответе приходит. Насколько я понял вы используете rest-сервис. Укажите тогда type: 'rest' у proxy. Конечно проблема скорее всего не в этом, возможно вы неверно указали record или требуется указать root (в зависимости от структуры данных).
Сообщение от WalterScott
Интересный момент: если в firebug посмотреть переменную store -свойство proxy - свойство reader, то видно следующее: Object { type="json", superclass={...}, config={...}, ещё...}
Добавьте после определения store(после 27-й строки) строку
alert(store.getProxy().getReader().type);

и проверьте.
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2012, 22:23
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Кстати, в IE работает. И с type="rest" и c type="ajax". Не работает в FF и Хроме. Ну, хром это вообще отдельная история...

xml такой:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contacts>
<contact>
<id>1</id>
<mail>ivan@mail.ru</mail>
<name>Ivanov</name>
</contact>
<contact>
<id>2</id>
<mail>peter@mail.ru</mail>
<name>Petrov</name>
</contact>
</contacts>


store.getProxy().getReader().type и в Firefox, и в IE возвращает xml.

Указание root в Firefox не помогло, а в IE вызвало странный эффект - стала отображаться только одна запись из xml.
Ответить с цитированием
  #4 (permalink)  
Старый 19.06.2012, 09:07
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Проверил в FF. указал свойства:
у прокси
type: 'rest'

у ридера:
type: 'xml',
record: 'contact',
root: 'contacts',
idProperty: 'id'

Не вижу проблем, все отлично работает.
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2012, 21:37
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Гм, мне сейчас пришла в голову светлая мысль - поместить папку с ExtJS-страницей на tomcat, на котором работает restful-сервис. И обращаться к ней, соответственно, через http://localhost:8080/
И всё заработало, во всех браузерах.
До этого они находились, вроде как на разных хостах. Но это вроде не должно смущать, раз уж мы к веб-сервису обращаемся?
Ответить с цитированием
  #6 (permalink)  
Старый 20.06.2012, 01:01
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от WalterScott
Но это вроде не должно смущать, раз уж мы к веб-сервису обращаемся?
Это как раз-таки принципиально, взгляните на иерархию -> http://docs.sencha.com/ext-js/4-0/#!...ata.proxy.Rest. В обоих случаях используется XHR, а насколько я знаю, для того чтобы обработать ответ из внешнего сервиса последний должен отдавать заголовок Access-Control-Allow-Origin: domain.com, где domain.com - адрес домена с которого отправляется запрос. Тоесть примерно так, если не ошибаюсь:
request.setHeader("Access-Control-Allow-Origin", "domain.com");
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с выводом информации после запроса с помощью ajax Dimario AJAX и COMET 0 23.07.2011 17:08
Проблема с выводом скрипта на страницу Mike_S. Общие вопросы Javascript 8 14.06.2011 07:26
Проблема с выводом контента в топ-панели Slavk0 Общие вопросы Javascript 0 28.03.2011 11:39
Проблема с кодировкой в XML kuzroman Серверные языки и технологии 5 10.12.2010 18:29
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45