Просмотр полной версии : URLLoader некорректно работает на IE
Здраствуйте!
После некоторых трудностей, сделал слайдшоу рисунки, который загружает картинки из сервера.
При воспроизведения слайдшоу флеш файл можут загрузить/отправить данные. Получить параметры картинки, отправить запрос про клика, и тд.
Все прекрасно работает на Firefox, Opera. Но на IE появляется проблемы, после первых-третых загрузок флеш вообще не загружает данные. Отправлять может.
На каждом секунду 2 раза загружаю данные через класс URLLoader(вырезка из кода):
var msgLoader:URLLoader;
var timer:Timer;
function setTimer() {
timer = new Timer(500);
timer.addEventListener("timer", loadMessages);
timer.start();
msgLoader = new URLLoader();
msgLoader.addEventListener(Event.COMPLETE, getMessages);
}
function loadMessages(event:TimerEvent):void {
request = new URLRequest("http://localhost/index.php");
msgLoader.load(request);
}
...
Жду ваших ответов.
Заранее благодарю.
А кто сказал, что за 500 мс данные успеют загрузиться? Там вообще полный хаос начнется…
Надо таймер запускать в обработчике complete. Что бы только ПОСЛЕ предыдущей загрузки началась следующая.
__etc, пока на локальном серваке работает.
miramax, спасибо. Попробую.
Пробовал способ [B]miramax[B].
Но все равно не работает. Потом для теста так сделал.
Написал маленький скрипт, который при каждой обращении добавляет строка параметров к файл. Теперь можно узнать сколько обращения будет к скрипту.
Во флеше:
Потом обработчике COMPLETE(объект msgLoader:URLLoader) добавляю символ на TextField.
На флеше все работает. Он отправляет запрос на сервер и получает ничего. А РНР код только 3 строка добавляет к файлу. Как-то запросы флеш ролика на пути пропадает.
Может проблема в кэшировании браузера?
Проблема не в кешировании. Проверил.
Еще один тест.
Просто создал ролик с таким кодом:
package {
import flash.events.*;
import flash.net.*;
import flash.utils.*;
import flash.display.MovieClip;
import flash.text.*;
public class URLLoaderTest extends MovieClip {
var loader:URLLoader;
var request:URLRequest;
var timer:Timer;
var variables:URLVariables;
var text:TextField;
public function URLLoaderTest() {
text = new TextField();
text.autoSize = TextFieldAutoSize.LEFT;
text.border = true;
addChild(text);
text.appendText("start\n");
variables = new URLVariables();
timer = new Timer(500);
timer.addEventListener("timer", loadSendMsg);
timer.start();
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, loadComplete);
}
function loadComplete(event:Event):void {
text.appendText("Msg loaded - " + String(loader.data) + "\n");
timer.start();
}
function loadSendMsg(event:TimerEvent):void {
timer.stop();
request = new URLRequest("http://localhost/SP/test/get.php");
loader.load(request);
}
}
}
РНР код(при обрашении просто добавит строка с текстом "getted"):
<?php
$f = fopen("get.txt", "a");
fwrite($f, "getted\n");
fclose($f);
?>
Только первый вызов loader.load(request) обращает на сервер. В файле число строк - 1.
Если запустить этот ролик на Firefox и Opera проблем не будет.
IE шестая. На седмом не пробовал.
Странно.
Может проблема в кэшировании браузера?
Для избежания кэширования нужно или отправлять POST запросы или каждый раз изменять GET запрос. Функция noCache гарантирует уникальность строки запроса.
function loadSendMsg(event:TimerEvent):void {
timer.stop();
request = new URLRequest("http://localhost/SP/test/get.php?antiCache="+noCache());
loader.load(request);
}
function noCache():String{
var d:Date = new Date();
return d.getHours()+'_'+d.getMinutes()+"_"+d.getSeconds()+"_"+Math.random();
}
Ура! Заработала!
Спасибо вам [B]miramax[B]! Огромное!!!
Я вообще не думал об этом.
Благодарю вам от узбекских флешеров!
я немного обгрейчу твою функцию - так быстрее и интереснее)
function noCache():String
{
return new Date().getTime().toString();
}
рендом добавлять по вкусу, для посылки данных пойдет, а вот для добавления каких-то id шников в цикле нужно рендом.
А вдруг он время назад переставит ? :D
Надо быть уверенным на все 100% , ну на 99,999999999999 % =)
Поэтому рандом, как контрольный.
А вдруг он время назад переставит ? :D
Надо быть уверенным на все 100% , ну на 99,999999999999 % =)
Поэтому рандом, как контрольный.
в моем случае все равно не получиться - нужно "угадать" время для миллисекунд!
хотя нет покоя извращенцам :D
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.