Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.02.2013, 19:15
matperez вне форума Посмотреть профиль Отправить личное сообщение для matperez Найти все сообщения от matperez
  № 1  
Ответить с цитированием
matperez

Регистрация: Feb 2013
Сообщений: 6
По умолчанию Не выполняется URLLoader.load();

Здравствуйте!

Есть некий продукт который должен подгружать данные со стороннего сайта. В строке браузера передается идентификатор, с этим идентификатором идем на сервер и получаем там данные в виде xml.

В процессе создаю новый лоадер, вешаю обработчик на событие complete и запускаю URLLoader.load(). Локально все прекрасно, коллбек выполняется. При загрузке на сервер коллбека след простыл.

Про кроссдоменные запросы в курсе. На целевом домене разрешил запросы с любых других доменов. В подтверждение в дебаг файл пишет:

Цитата:
ОК: Файл политики принят: http://embed.site.com/crossdomain.xml
ОК: Выполняется поиск директив <allow-access-from> в файлах политики, чтобы авторизовать загрузку данных из ресурса по адресу http://embed.site.com/data/-6y036c7hz/default/ инициатором запроса из http://stage.site.com/main.swf?id=-6y036c7hz
ОК: Запрос ресурса на http://embed.site.com/data/-6y036c7hz/default/ источника запроса из http://stage.site.com/main.swf?id=-6y036c7hz разрешен согласно файлу политики на http://embed.site.com/crossdomain.xml
Код примерно такой:
Код AS3:
var loaderXML : URLLoader = new URLLoader(); //create a new URLLoader Object
loaderXML.addEventListener( Event.COMPLETE, whenLoadedXML ); //add an event listener to that object
try {
loaderXML.load( new URLRequest( "http://embed.site.com/data/" + id + "/" + type + "/") );
trace( "XML run load request..."); 
} catch (error:SecurityError) {
trace("A SecurityError has occurred. " + error.message);
}
Пробовал так же вешать обработчики на события ошибки, прогресса и так далее:
Код AS3:
loaderXML.addEventListener( Event.COMPLETE, whenLoadedXML ); //add an event listener to that object
loaderXML.addEventListener( IOErrorEvent.IO_ERROR, xmlLoaderErrorHandler );
loaderXML.addEventListener( ProgressEvent.PROGRESS, xmlLoaderProgressHandler );
loaderXML.addEventListener( Event.OPEN, xmlLoaderOpenHandler);
loaderXML.addEventListener( HTTPStatusEvent.HTTP_STATUS, xmlLoaderHttpStatusHandler );
Локально в превью и при экспорте и запуске через html страницу все обработчики сработали, при загрузке с сервера ничего не происходит. Код выполняется без ошибок, но подгрузка данных не производится.

Подскажите куда можно копнуть, что еще проверить?

Старый 18.02.2013, 20:03
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 2  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Если я всё правильно понимаю то фраза:
Код AS3:
loaderXML.addEventListener( Event.COMPLETE, whenLoadedXML );
говорит о том что должна быть объявлена функция whenLoadedXML, а её здесь не наблюдается.

Добавлено через 8 минут
И потом, а какой документ Вы загружаете?
Код AS3:
loaderXML.load( new URLRequest( "http://embed.site.com/data/" + id + "/" + type + "/") ); //<--- ????
Добавлено через 15 минут
Строка URL у Вас заканчивается заканчивается именем директории type

Старый 18.02.2013, 20:43
matperez вне форума Посмотреть профиль Отправить личное сообщение для matperez Найти все сообщения от matperez
  № 3  
Ответить с цитированием
matperez

Регистрация: Feb 2013
Сообщений: 6
Цитата:
Сообщение от Chum Посмотреть сообщение
Если я всё правильно понимаю то фраза:
Код AS3:
loaderXML.addEventListener( Event.COMPLETE, whenLoadedXML );
говорит о том что должна быть объявлена функция whenLoadedXML, а её здесь не наблюдается.

Добавлено через 8 минут
И потом, а какой документ Вы загружаете?
Код AS3:
loaderXML.load( new URLRequest( "http://embed.site.com/data/" + id + "/" + type + "/") ); //<--- ????
Добавлено через 15 минут
Строка URL у Вас заканчивается заканчивается именем директории type
Нене.. Функция присутствует. Пусть будет что-нибудь вроде
Код AS3:
function whenLoadedXML( e:Event ):void {
	xml = new XML( e.target.data );
	item = xml.item;
	trace(item[0].name);
}
Документ - обычный XML. Какой-нибудь такой:
Код:
<data>
<item>
<name>
test
</name>
</item>
</data>
Тип документа в ссылке отсутствует, так как документ генерируется динамически и используется ЧПУ.

Повторюсь, что локально все нормально отрабатывает (в том числе получение данных с удаленного сервера), проблема при загрузке swf с хостинга.

Старый 18.02.2013, 20:51
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 4  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Ну тогда так:
Код AS3:
"http://embed.site.com/data/" + id + "/" + type
а не так:
Код AS3:
"http://embed.site.com/data/" + id + "/" + type + "/"
если только имеется ввиду что:
Код AS3:
var type:String = "name.xml"

Старый 18.02.2013, 21:41
matperez вне форума Посмотреть профиль Отправить личное сообщение для matperez Найти все сообщения от matperez
  № 5  
Ответить с цитированием
matperez

Регистрация: Feb 2013
Сообщений: 6
Цитата:
Сообщение от Chum Посмотреть сообщение
Ну тогда так:
Код AS3:
"http://embed.site.com/data/" + id + "/" + type
а не так:
Код AS3:
"http://embed.site.com/data/" + id + "/" + type + "/"
если только имеется ввиду что:
Код AS3:
var type:String = "name.xml"
Нет. Имеется в виду именно данная строка:
Код AS3:
http://embed.site.com/data/id/type/"
. Внутри XML, и заголовок Content-Type text/xml; charset=utf-8 так же правильный отдается.

Проблема в том, что метод load() в принципе не отрабатывает и никакие колбеки на ошибку ли (loaderXML.addEventListener( IOErrorEvent.IO_ERROR, xmlLoaderErrorHandler ), или на завершение (loaderXML.addEventListener( Event.COMPLETE, whenLoadedXML ) не вызываются.

Старый 18.02.2013, 22:04
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 6  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Вот кусочек официальной документации по AS3:
Класс URLRequest
Цитата:
В следующем примере создается новый объект Loader, которому затем передается объект URLRequest, содержащий путь к XML-файлу. При успешном выполнении операции загрузки отправляется событие complete, а данные в XML-файле переходят в выходные данные. Дополнительные обработчики событий регистрируют другие события, включая ошибки.
Чтобы запустить данный пример, поместите файл XMLFile.xml в тот каталог, где находится рассматриваемый SWF-файл.
Код AS3:
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.*;
 
    public class URLRequestExample extends Sprite {
 
        public function URLRequestExample() {
            var loader:URLLoader = new URLLoader();
            configureListeners(loader);
 
            var request:URLRequest = new URLRequest("XMLFile.xml"); // <--- ! ! ! ! ! !
            try {
                loader.load(request);
            } catch (error:Error) {
                trace("Unable to load requested document.");
            }
        }

Старый 18.02.2013, 22:16
matperez вне форума Посмотреть профиль Отправить личное сообщение для matperez Найти все сообщения от matperez
  № 7  
Ответить с цитированием
matperez

Регистрация: Feb 2013
Сообщений: 6
Документацию читал. Для того, что бы отдать xml файл серверу вовсе не обязательно отзываться по адресу что-то_там.xml.

Ну пусть будет ссылка именно на xml документ:
Код AS3:
var loader : URLLoader = new URLLoader();
loader.addEventListener( Event.COMPLETE, completeHandler );
loader.addEventListener( IOErrorEvent.IO_ERROR, errorHandler );
loader.load( new URLRequest( "http://somesite.com/data.xml") );
function completeHandler( event : Event ) : void {
	xml = new XML( event.target.data );
	item = xml.item;
	trace(item[0].name);
}
function errorHandler( event:IOErrorEvent ):void {
	trace( "errorHandler: " + event.type + ' ' + event.text);
}
ни completeHandler, ни errorHandler не вызываются.

Старый 18.02.2013, 22:32
Chum вне форума Посмотреть профиль Отправить личное сообщение для Chum Найти все сообщения от Chum
  № 8  
Ответить с цитированием
Chum
[+1 06.03.13]

Регистрация: Feb 2007
Сообщений: 174
Не знаю чем помочь ещё, разве что вот код который писал я в своём приложении:
Код AS3:
loadXML = new URLLoader();
loadXML.addEventListener(Event.COMPLETE, zagruzXML);      /* Загрузка XML-документа --- */
loadXML.load(new URLRequest("../components/com_kartarf/xml/" + par.xmldoc + ".xml?f=" + Math.floor(Math.random()*10000)));
		}
 
		/* Загрузка XML-документа и получение данных --- */		
		private function zagruzXML(e:Event):void{
	        var xml:XML = XML(loadXML.data);
	        var xmlList:XMLList = xml.children();
			var arrDk1:Array = new Array();
			var arrDk2:Array = new Array();
            for(var i:uint = 0; i < xmlList.length(); i++){
            // Далее код выполнения конкретной задачи.
				if(i !== 21 && i !== 22 && i !== 55 && i !== 58){
					arrDk1.push(xmlList[i].toString());
				}else{
					if(i == 21) arrDk2[1] = xmlList[21].toString();
					if(i == 22) arrDk2[0] = xmlList[22].toString();
					if(i == 55) arrDk2[2] = xmlList[55].toString();
					if(i == 58) arrDk2[3] = xmlList[58].toString();
				}
	        }
        }
Может как-то так ? Но у меня загрузка идёт с того же сервера.

Добавлено через 5 минут
Попробуйте оттолкнуться от в zagruzXML:
var xml:XML = XML(loadXML.data);
var xmlList:XMLList = xml.children();

Старый 18.02.2013, 23:17
Sync вне форума Посмотреть профиль Отправить личное сообщение для Sync Найти все сообщения от Sync
  № 9  
Ответить с цитированием
Sync
 
Аватар для Sync

Регистрация: Feb 2013
Сообщений: 176
Может проще все же любым дебагером посмотреть чего сервер отвечает и отправляется ли вообще запрос?

Старый 18.02.2013, 23:42
matperez вне форума Посмотреть профиль Отправить личное сообщение для matperez Найти все сообщения от matperez
  № 10  
Ответить с цитированием
matperez

Регистрация: Feb 2013
Сообщений: 6
Цитата:
Сообщение от Sync Посмотреть сообщение
Может проще все же любым дебагером посмотреть чего сервер отвечает и отправляется ли вообще запрос?
Очевидно, запрос не отправляется Что имеется в виду под "любым дебагером"?

Добавлено через 3 минуты
Накидал быстротест:
Код AS3:
package  {
 
    import flash.display.MovieClip;
    import flash.events.*;
    import flash.net.*;
 
	public class test extends MovieClip {
 
		private var loader: URLLoader;
		private var url: String;
		private var id: String;
		private var type: String;
 
		public function test() {
			id = root.loaderInfo.parameters.id;
			type = root.loaderInfo.parameters.type;
			if( id === null ) {
				id = '-6y036c7hz';
				type = 'default';
			}
			url = "http://embed.site.com/data/" + id + "/" + type + "/";
 
			loader = new URLLoader();
			loader.addEventListener(Event.COMPLETE, completeHandler);
 
			try {
                loader.load( new URLRequest( url ) );
            } catch ( error:Error ) {
                trace("Unable to load requested document.");
            }			
		}
 
        private function completeHandler(event:Event):void {
			var xml : XML = new XML( event.target.data );
			var item = xml.item;
			trace(item[0].name);
        }
	}
}
Отрабатывает на целевом сервере на ура. Трассировка возвращает нужные данные. Буду ковырять исходный код, где-то криворукость сработала.

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.