Просмотр полной версии : Проблема с загрузкой данных в Flash'ку на HTML странице
Написал на AS3 скрипт, который передает данные PHP файлу, а тот обращается к MySQL и на основе полученных данных генерирует XML, который загружает Flash.
Ну так вот. Когда я запускаю Flash'ку в среде разработки (Adobe Flash CS4), то данные в ней отображаются. Также они отображаются при ее запуске вне среды. Но вот когда я помещаю ее на HTML страницу данные уже не отображаются.
Я изрыл весь интернет и узнал, что данная проблема может быть связана с политикой безопасности Flash Player'а, и что может момочь некий crossdomain.xml. Но при помещении такового в папку где находится Flash'ка ничего не меняется.
содержание crossdomain.xml
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
Инстрментарий:
Adobe Flash Player 10
Adobe Flash CS4
Denwer 3
crossdomain.xml кладут не в папку, где флешка находится а в "root" вашего сайта.
Или почитайте про SecurityPolicy и как грузить crossdomain.xml если он в другой папке.
Проведем эксперимент №1
Создадим в Денвер'е, в папке home, новую дирректорию. Назовем ее simpletest (таково будет и имя нашего сайта). В папке simpletest создаем еще одну папку www. Сдесь создаем файл index.php (UTF-8), со следующим содержимым:
<?php
echo"
<html>
<head>
<title>Простой тест</title>
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">
</head>
<body>
<object classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codebase=http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0 id=index width=700 height=600>
<param name=src value=simpletest.swf>
<param name=quality value=high>
<embed name=movie src=simpletest.swf quality=high width=700 height=600 type=application/x-shockwave-flash pluginspage=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash>
</embed>
</object>
</body>
</html>
";
?>
содаем файл data.php (UTF-8) с содержимым :
<?php
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<dots group=\"TB\">
<item date=\"2007-06-15 00:00:00\" money=\"1800.00000\"/>
<item date=\"2007-06-18 00:00:00\" money=\"50.00000\"/>
<item date=\"2007-06-19 00:00:00\" money=\"50.00000\"/>
<item date=\"2007-06-22 00:00:00\" money=\"50.00000\"/>
<item date=\"2007-07-04 00:00:00\" money=\"50.00000\"/>
<item date=\"2007-07-12 00:00:00\" money=\"100.00000\"/>
</dots>";
?>
В этой же папке создаем файл simpletest.fla, помешаем на сцену компонент TextArea и присваиваем ему имя "txt". Добавляем слой "actions" и в нем пишем код:
var loader:URLLoader = new URLLoader();
var quest:URLRequest = new URLRequest("http://simpletest/data.php");
loader.load(quest);
loader.addEventListener(Event.COMPLETE, comp)
function comp(e:Event):void
{
txt.text = XML(e.target.data);
}
Компилируем флэш-ролик. Запускаем Денвер.
При открытии адреса http://simpletest во всех 3х браузерах (FireFox 3.5 , Opera 9.64, IE8) данные передающиеся cо странице data.php , отображаются корректно. Значит политика безопасности флеш плеера скорее всего ни причем.
Эврика, я понял в чем была проблема.
Мне надо было передать переменную (variable1.group=2) PHP-скрипту, и забрать полученный результат.
И реализовал я это так.
var request1:URLRequest = new URLRequest("http://test2/data2.php");
var variable1:URLVariables = new URLVariables();
var loader1:URLLoader = new URLLoader();
request1.method = URLRequestMethod.POST;
variable1.group=2;
request1.data = variable1;
loader1.load(request1);
loader1.addEventListener(Event.COMPLETE, loadXML);
function loadXML(event:Event):void
{
var request2:URLRequest = new URLRequest("http://test2/data2.php");
var loader2:URLLoader = new URLLoader();
loader2.load(request2);
loader2.addEventListener(Event.COMPLETE, buildXML);
}
function buildXML(event:Event):void
{
txt.text = event.target.data;
}
Этот код работал, только в среде разработки Flash и если локально запустить скомпилированный Flash ролик. Так флэшка работала через браузер IE8.
В нормальных же браузерах эта флэшка не отображала полученных данных. Потому что, если посмотреть на 2 URLLoader'а со стороны браузера, то каждый представляет собой отдельного пользователя. То есть первый URLLoader передает переменную php-файл? который ему выводит запрашиваемое содержимое на основе посланной переменной, и после этого второй URLLoader обращается к тому же php-скрипту, и тот ему ничего не выводит.
Ниже представлен php скрипт, если кому интересно.
<?php
if(isset($_GET["group"]))
{
$mcon = mysql_connect("localhost","root","");
mysql_select_db("test",$mcon);
$query = "select * from table1";
$result = mysql_query($query, $mcon);
$out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><dots>";
while($row = mysql_fetch_assoc($result))
{
$out .= "<item date=\"".$row["data"]."\" money=\"".$row["money"]."\"/>";
}
$out .= "</dots>".$_GET["group"];
echo $out;
}
else
{
echo "переменая POST не была передана";
}
?>
данная проблема решается с помошью одного URLLoader и URLRequest, к которому в параметр url ("http://test2/data.php") дописывается GET-переменная - ("http://test2/somescript.php?group="+group)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.