2013-02-28 3 views
0

Я пытаюсь отправить некоторые данные из моего приложения flex в скрипт PHP, который будет сохранен.Flex Post to php page

В качестве простого теста я сделал скрипт PHP как так

<?php 
if ($_POST) { 

    $message = "Text:" . $_POST['Text']; 

    mail('[email protected]', 'POSTED!', $message); 

} else { 
    mail('[email protected]', 'No Post Test', 'Testing..'); 
} 

?> 

Если я попал сценарий в браузере я получаю по электронной почте штраф. Но когда я называю функцию flex, я ничего не получаю? Я делаю это неправильно?

private function onTextMessageRecv(event:AsyncDataEvent):void 
{ 
    var dialogID:String = event.data; 
    var strFrom:String = event.data2; 
    var strTime:String = event.data3; 
    var MessageStr:String = event.data4; 

    var variables:URLVariables = new URLVariables() 
    variables.From = strFrom; 
    variables.To = m_strUserDisplayName; 
    variables.Text = MessageStr; 
    saveIMdata(variables); 

} 

private function saveIMdata(variables:URLVariables):void 
{ 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, "Saving IM..."); 
    var myData:URLRequest = new URLRequest("http://im.vlowe.co.uk/save.php") 
    myData.method = URLRequestMethod.POST 
    myData.data = variables 
    var loader:URLLoader = new URLLoader() 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES 
    loader.load(myData) 
} 

Я вижу запись в журнале для «Сохранение IM ...», но нет электронной почты?

Спасибо за любую помощь.

обновление: Пробовал это .. но ни одно событие не срабатывает?

private function saveIMdata(variables:URLVariables):void 
{ 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, "Saving IM..."); 
    var myData:URLRequest = new URLRequest("http://im.vlowe.co.uk/save.php"); 
    myData.method = URLRequestMethod.POST; 
    myData.data = variables; 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, variables.Text); 
    var loader:URLLoader = new URLLoader(); 

    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, "Loaded?..."); 
    loader.addEventListener(Event.COMPLETE, onLoadComplete); 
    loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 

    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.load(myData); 
} 

private function onLoadComplete(e:Event):void 
{ 
    var loader:URLLoader = URLLoader(e.target); 
    trace(loader.data); 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, "Load completed"); 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, loader.data.toString()); 
} 

private function onLoadError(e:IOErrorEvent):void 
{ 
    trace(e.text); 
    LogAddItem(LOG_CATEGORY_MAIN_DEBUG, "Error " + e.text); 
} 

Update 2: мой crossdomain.xml

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM 
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 

<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="all"/> 
    <allow-access-from domain="*" to-ports="80,843,8080,8081,8082" secure="false"/> 
</cross-domain-policy> 

ответ

2

Звучит для меня как проблема безопасности перекрестного домена.

loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
    private function securityErrorHandler(event:SecurityErrorEvent):void { 
     trace("securityErrorHandler: " + event); 
    } 

[EDIT]

Это не существует http://im.vlowe.co.uk/crossdomain.xml

Ваш crossdomain.xml должен выглядеть следующим образом. Опустить doctype

<?xml version="1.0" encoding="UTF-8"?> 
<cross-domain-policy> 
    <allow-access-from domain="*.someDomain.com"/> 
</cross-domain-policy> 
+0

Я попробую. Можно ли это решить? –

+0

Я получаю сообщение об ошибке .. [SecurityErrorEvent type = "securityError" bubbles = false cancelable = false eventPhase = 2 text = "Ошибка # 2048" –

+0

Crossdomain.xml должен находиться в корневом каталоге сервера, который вы отправляете данные в. опубликовано редактирование –

0

Добавить ошибку и полные обработчики вашего URLLoader и тест, если файл PHP загружен на все:

loader.addEventListener(Event.COMPLETE, onLoadComplete); 
loader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); 

private function onLoadComplete(e:Event):void 
{ 
    var loader:URLLoader = URLLoader(e.target); 
    trace(loader.data); 
} 

private function onLoadError(e:IOErrorEvent):void 
{ 
    trace(e.text); 
} 

Избегайте что-то в своем php-файле, и вы должны увидеть его в своей функции onLoadComplete.

+0

Пробовал это, ни один из событий не срабатывает? –

+0

Как долго вы ждали? Иногда для запуска обработчика ошибок требуется некоторое время, если сервер не отвечает. –