![]() |
|
||||||||||
|
|
|
|||||
|
Здравствуйте. Столкнулся с проблемой загрузки больших XML-файлов (порядка 1мб и выше). Загрузка с локальной директории.
Как и следовало ожидать, флеш по истечении 15 секунд выдает модальное окно с запросом на разрешение продолжения выполнения скрипта. Решил разбить xml-файл на несколько (скажем, по 20 строк каждый). Гружу данные через loadVars, каждую новую партию присоединяю к строке (как вариант - concat), по завершении загрузки паршу в xml. В итоге, доступа к определенному узлу, атрибуту... отсутствует, ввиду, как я понял, неверной конечной структуры XML. Ранее, при загрузке через loadVars xml-данных использовал метод sendAndLoad и ресивером делал XML переменную, но, та м не было разбиения на строки. Вот примерный код, который использую сейчас.
var xml:String = " ";
var current:Number = 0;
function loadData(path:String) {
var my_lv:LoadVars = new LoadVars();
clearInterval(interval);
my_lv.onLoad = function(success:Boolean) {
trace(current+"-------------------");
if (success) {
current++;
xml+=this.toString();
if (current<=2) {
interval = setInterval(loadData, 2000, "multixml/"+current+".xml");
} else {
var level_xml:XML = new XML();
level_xml.ignoreWhite = true;
level_xml.parseXML(xml);
trace(level_xml);
}
} else {
trace("Error loading/parsing LoadVars.");
}
};
my_lv.load(path);
}
var interval:Number = setInterval(loadData, 2000, "multixml/0.xml");
Спасибо
__________________
freelancer Последний раз редактировалось Ventur; 11.09.2007 в 20:57. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
А почему сразу xml не загрузить?
|
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
А что толку грузить частями? Все равно время общее одно и тоже будет. Провел эксперимент ради интереса: загрузил файл 13 мб, все замечательно загрузилось.
to Kikasso: по всей видимости у Ventur'а он грузится слишком долго. Последний раз редактировалось udaaff; 10.09.2007 в 23:31. |
|
|||||
|
Нет, когда одна сессия больше 15 сек - выскакивает Abort....
Потому и гружу частями. В итоге прерывание, смотри интервал в коде
__________________
freelancer |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Не разу не сталкивался, но я таких файлов и не грузил. Можно попробовать что-то такое:
var mainXML = new XML('<xml/>');
var part = 1;
var path = 'file.php'; //ну или кто там
var tempXML = new XML();
tempXML.ignoreWhite = true;
tempXML.onLoad = function(){
mainXML.firstChild.appendChild(this.firstChild);
}
tempXML.load( path + '?part='+part );
upd^ код поправил Последний раз редактировалось Kikasso; 11.09.2007 в 23:19. |
|
|||||
|
Нет, не зацикливает, xml большого размера, потому время загрузки/обработки составляет больше 15 секунд. Даже если просто пустой скрипт загрузки.
Видимо, строки в длину слишком большие. Для теста я могу вам выслать свой xml и вы увидите. XML имеет структуру, схожую с SVG (векторный формат данных). Проблема в загрузке файлов больше 1мб, а не а парсинге и прочей обработке.
__________________
freelancer Последний раз редактировалось Ventur; 11.09.2007 в 10:26. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Цитата:
appendChild (XMLNode.appendChild method) |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Я все еще не понимаю.
var myX:XML = new XML();
var intervalID:Number;
myX.onData = function(src){
txt.text ='ok';
clearInterval(intervalID);
}
function checkProgress(xmlObj:XML):Void {
var bytesLoaded:Number = xmlObj.getBytesLoaded();
var bytesTotal:Number = xmlObj.getBytesTotal() || 10000000;
var percentLoaded:Number = Math.floor(((bytesLoaded || .01) / bytesTotal ) * 100);
txt.text = "percent loaded: " + percentLoaded;
}
myX.load('Landing.mp3');
intervalID = setInterval(checkProgress, 100, myX);
Откуда эта история с 15 секундами? гружу mp3, потому что искать большой текстовик лень. Парсить я его не собираюсь )) А на этапе загрузки флешу не важно что грузить. Последний раз редактировалось Kikasso; 11.09.2007 в 12:04. |
|
|||||
, вы еще клип грузите, ан е mp3.С xml все иначе. В общем, решение проблемы - unescape(); Спасибо за участие Верный код типа этого:
var xml:String = "";
var current:Number = 0;
function loadData(path:String) {
var my_lv:LoadVars = new LoadVars();
clearInterval(interval);
my_lv.onLoad = function(success:Boolean) {
if (success) {
current++;
xml+=this.toString();
if (current<=2) {
interval = setInterval(loadData, 2000, "multixml/"+current+".xml");
} else {
var level_xml:XML = new XML();
level_xml.ignoreWhite = true;
level_xml.parseXML(unescape(xml));
trace(level_xml);
}
} else {
trace("Error loading/parsing LoadVars.");
}
};
my_lv.load(path);
}
var interval:Number = setInterval(loadData, 2000, "multixml/0.xml");
__________________
freelancer Последний раз редактировалось Ventur; 11.09.2007 в 20:58. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Что грузить, без разницы. Вот нашел какой-то текстовик на 4 мега, обозвал его "test.xml" и гружу этим же кодом, только onData поменял. Время загрузки 323 секунды.
Все нормально грузится. Откуда вы взяли 15 секунд? |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|