如何通过URL将参数从Flex HttpService发送到PHP
请原谅我,如果这个问题已经得到了回答/非常基本/这个问题的措辞不正确,我对这个问题非常陌生,而且很挣扎 基本上,我有一个后端PHP,它生成XML,然后FlashBuilder继承数据。我陷入困境的地方是理解flashbuilder如何通过HttpService向PHP发送参数,例如 这是它目前的解释:如何通过URL将参数从Flex HttpService发送到PHP,php,apache-flex,flex4,flash-builder,httpservice,Php,Apache Flex,Flex4,Flash Builder,Httpservice,请原谅我,如果这个问题已经得到了回答/非常基本/这个问题的措辞不正确,我对这个问题非常陌生,而且很挣扎 基本上,我有一个后端PHP,它生成XML,然后FlashBuilder继承数据。我陷入困境的地方是理解flashbuilder如何通过HttpService向PHP发送参数,例如 这是它目前的解释: http://..../file.php?action=getitems 我希望flash builder发送的是 &class=fruit (<- the class would
http://..../file.php?action=getitems
我希望flash builder发送的是
&class=fruit (<- the class would be dependant on what is selected from the drop down in the application)
谢谢你,如果这是胡说八道,我道歉。我使用的是Flash Builder 4。总的来说,我会使用push方法,而不是传递一个变量,以减少从中间被黑客攻击的机会 http调用的我的AS3代码:
public function someRequest() : void
{
var service : HTTPService = new HTTPService();
service.url = "http://localhost/getData.php";
service.useProxy = false;
service.method = "POST";
service.contentType = "application/xml"; // Pass XML data.
service.request = "<ID>somevalue</ID>"; // The XML data.
service.resultFormat = "xml"; // Recieve XML data.
service.addEventListener(ResultEvent.RESULT, createFields);
service.addEventListener(FaultEvent.FAULT, handleFault);
service.send();
}
private function createFields(event : ResultEvent) : void
{
var result : String = event.result.toString();
returnData = XML(result);
}
private function handleFault(event : FaultEvent) : void
{
var faultstring : String = event.fault.faultString;
Alert.show(faultstring);
}
公共函数someRequest():void
{
var服务:HTTPService=newhttpservice();
service.url=”http://localhost/getData.php";
service.useProxy=false;
service.method=“POST”;
service.contentType=“application/xml”;//传递xml数据。
service.request=“somevalue”;//XML数据。
service.resultFormat=“xml”//接收xml数据。
service.addEventListener(ResultEvent.RESULT,createFields);
service.addEventListener(FaultEvent.FAULT,handleFault);
service.send();
}
私有函数createFields(事件:ResultEvent):void
{
var result:String=event.result.toString();
returnData=XML(结果);
}
私有函数handleFault(事件:FaultEvent):无效
{
var faultstring:String=event.fault.faultstring;
Alert.show(faultstring);
}
正如您在中间看到的,有一个XML空间用于输入变量。我使用这种方法将数据从PHP来回传递到AS3
PHP是:
<?php
define("DATABASE_SERVER", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "**");
define("DATABASE_NAME", "dbName");
//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
mysql_select_db(DATABASE_NAME);
$Query = "SELECT * from data WHERE employeeID = '" . ($_POST['ID']) . "'";
$Result = mysql_query($Query);
$Return = "<data>";
while ($User = mysql_fetch_object($Result))
{
$Return .= "<user><userid>" . $User->userid . "</userid><username>" . $User->username . "</username><emailaddress>" . $User->emailaddress . "</emailaddress></user>";
}
$Return .= "</data>";
mysql_free_result($Result);
print ($Return)
?>
这在Flex中实际上相当简单
var service : HTTPService = new HTTPService();
service.url = "http://localhost/getData.php";
service.method = "POST";
var parameters:Object = new Object();
parameters["action"] = "getitems";
parameters["class"] = "fruit";
service.send(parameters);
。。。完成了 我通常通过[POST]而不是[GET]来处理这个问题
在actionscript函数中:
private function sendRequest():void {
var obj:Object = new Object();
obj.action="getitems";
obj.class="fruit";
myService.send(obj);
您的httpService
<s:HTTPService id='myService' url='urlToYourPHP' method='POST' result='yourResultHandler' fault='yourFaultHandler' resultFormat='XML'/>
正如powelljf3所说,POST比GET更安全,尽管它仍然可以到达。只是一个注释,或者我是瞎子,我找不到PHP示例中传递数据的位置/方式。我在用于向AS3传递XML数据和从AS3传递XML数据的三行代码中添加了注释。它们是.contentType、.request和.resultFormat行。我发现使用XML很容易,因为mySQL可以干净地使用它,但是您可以更改这些行中的描述符以使用您选择的数据格式。如果您要提供示例代码,它可能会解释答案?很抱歉,我打开了两个窗口,并从错误的窗口复制了PHP。我已经在上面更正了它。您可以通过$_POST[xml_var]使用传递的变量,这样您的URL中就不需要这些变量了;“在我发布之前,应该已经阅读了所有的答案。Sam DeHaan击败我找到了正确的答案,尽管我非常确定你需要obj.paramater vice他的obj['paramater']。就我所知,他的方法可能也很有效。从未尝试过。”你的方法在大多数情况下都应该有效。我很担心使用“class”,因为它是一个关键词,所以我想我更愿意安全地按照我展示的方式来做。
<s:HTTPService id='myService' url='urlToYourPHP' method='POST' result='yourResultHandler' fault='yourFaultHandler' resultFormat='XML'/>