2014-12-18 35 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

相关问题