Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Проблема с загрузкой данных в Flash'ку на HTML странице (http://www.flasher.ru/forum/showthread.php?t=127279)

Gam6it 09.07.2009 17:13

Проблема с загрузкой данных в 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

CEBEP 09.07.2009 21:24

crossdomain.xml кладут не в папку, где флешка находится а в "root" вашего сайта.
Или почитайте про SecurityPolicy и как грузить crossdomain.xml если он в другой папке.

Gam6it 09.07.2009 23:56

Проведем эксперимент №1
Создадим в Денвер'е, в папке home, новую дирректорию. Назовем ее simpletest (таково будет и имя нашего сайта). В папке simpletest создаем еще одну папку www. Сдесь создаем файл index.php (UTF-8), со следующим содержимым:

PHP код:

<?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 код:

<?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" и в нем пишем код:
Код AS3:

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 , отображаются корректно. Значит политика безопасности флеш плеера скорее всего ни причем.

Gam6it 03.08.2009 22:54

Эврика, я понял в чем была проблема.

Мне надо было передать переменную (variable1.group=2) PHP-скрипту, и забрать полученный результат.
И реализовал я это так.
Код AS3:

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 код:

<?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
Код AS3:

("http://test2/data.php")

дописывается GET-переменная -
Код AS3:

("http://test2/somescript.php?group="+group)



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

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