2014-12-18 21 views
0

我有良好的PHP和AS3知識,但沒有關於連接兩個。 我正在嘗試使用AS3將數據發送到PHP,並讓PHP將它們保存到XML中。PHP應該如何反應一次動作POST數據到它?

我不明白的是php應該如何對外部代碼做出反應。 AS3腳本沒有啓動頁面,對嗎?它只是發送數據給它?只是執行動作端不起作用,也不會手動在瀏覽器中加載php(使用apache正確運行,胡扯回聲的功能)或在AS3發送後重新加載它。 xml保持爲空,沒有要跟蹤的返回值。所有的教程都會在之前和之後處理,假設我知道php是如何反應從AS3接收數據的。有人能告訴我我錯過的鏈接嗎?

如果它的事項,我的相關AS3:

 public function xt(e:MouseEvent):void 
    { 
     marque = tmarque.text; 
     prix = tprix.text; 
     couleur = tcouleur.text; 
     xmlString = "<?xml version='1.0' encoding='utf-8'?>"; 
     fichier = new XML(xmlString); 
     fichier = <ordinateurs />; 
     fichier.marque = marque; 
     fichier.couleur = couleur; 
     fichier.PRIX = prix; 
     var req = new URLRequest("C:/xampplite/htdocs/save_xml.php"); 
     //(have also tried placing the php in same folder) 

     req.data = fichier; 
     req.contentType = "text/xml"; 
     req.method = URLRequestMethod.POST; 
     var xmlSendLoad:URLLoader = new URLLoader(); 
     xmlSendLoad.addEventListener(Event.COMPLETE, onComplete, false, 0, true); 
     xmlSendLoad.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true); 
     xmlSendLoad.load(req); 
} 

function onComplete(event:Event):void { 
try { 
    var xmlResponse = new XML(event.target.data); 
    TXTtesticle.text = xmlResponse; 
    removeEventListener(Event.COMPLETE, onComplete); 
    removeEventListener(IOErrorEvent.IO_ERROR, onIOError); 
} catch (err:TypeError) { 
    TXTtesticle.text = "An error occured when communicating with server:\n" + err.message; 
} 
trace (xmlResponse); 
placeText(); 
} 

和PHP

<?php 
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) 
{ 
    $xml = $GLOBALS["HTTP_RAW_POST_DATA"]; 
    $file = fopen("data.xml","wb"); 
    fwrite($file, $xml); 
    fclose($file); 
    echo($GLOBALS["HTTP_RAW_POST_DATA"]); 
} 
?> 
+0

這裏使用'echo'沒有用。相反,登錄到文件(您可以重複使用PHP錯誤日誌['trigger_error()'](http://php.net/trigger_error)函數,只需啓用PHP錯誤日誌記錄)。這非常重要,因爲回聲將進入涅ana,因爲您不會在AS代碼中輸出迴應。而不是fopen + fwrite + fclose,我建議使用['file_put_contents()'](http://php.net/file_put_contents)。如果在'$ xml'旁邊的條件中使用另一個變量,那麼在$ GLOBALS [「HTTP_RAW_POST_DATA」]不僅看起來很腥的情況下,您可以輕鬆更改代碼。 – hakre 2014-12-19 14:53:26

回答

1

使用AS調用PHP基本上是完全一樣的東西隨着Ajax。而不是來自瀏覽器中客戶端JS的Ajax調用,而是來自Flash中的AS。

兩個問題我立即看到你的代碼:

(1)$GLOBALS["HTTP_RAW_POST_DATA"]?爲什麼呢?從PHP 5.6.0開始已棄用。早在那之前,這是一個糟糕的做法。有一種叫做$_POST的東西,其他人已經使用很長一段時間了。

(2)var req = new URLRequest("C:/xampplite/htdocs/save_xml.php");您不會對本地文件系統執行URL請求。您可以對網址執行URL請求,如var req = new URLRequest("http://localhost/save_xml.php");

要了解您的PHP應該如何處理POST,您可以查看任何Ajax教程。它不需要特定於AS,因爲向Web服務器發出http請求的客戶端是向Web服務器發出http請求的客戶端,而不管客戶端是什麼。

+0

AS3找不到文件的新路徑,儘管我的瀏覽器本身可以從localhost加載它。有任何想法嗎? – blue0 2014-12-18 23:10:55

+0

「AS3無法找到文件的新路徑」是什麼意思? – 2014-12-18 23:11:23

+0

雖然之前沒有對文件做任何事情,但現在使用http://localhost/save_xml.php路徑凍結並且控制檯輸出無法在此位置顯示源代碼。 – blue0 2014-12-18 23:16:11

相關問題