您的位置:首页 > 理论基础 > 计算机网络

使用URLLoader(HttpService)与服务端通信的一些问题-----以php为例

2010-04-07 21:09 393 查看
以为在as3里面和后台通讯也是那么简单的事情,但实践告诉你,还是要遇到很多麻烦,例如不像as2里面loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoader,URLLoaderDataFormat,URLStream,URLVariables。
在使用URLLoaderDataFormat.VARIABLES时报以下错误:

Error: Error #2101: 传递给 URLVariables.decode() 的字符串必须是包含名称/值对的 URL 编码的查询字符串。
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables$iinit()
at flash.net::URLLoader/flash.net:URLLoader::onComplete()

出现些错误其实在于php里的第一行echo输出的信息中是否包含了url参数方式的;

以下的方式是正确的:
<?php
$flashData = $_POST['message'];
$phpMessage = 'im php message!';
echo "phpMessage=$phpMessage&flashMessage=$flashData";
?>

<?php
$flashData = $_POST['message'];
$phpMessage = 'im php message!';
echo "phpMessage=$phpMessage&flashMessage=$flashData";
echo "其他信息";
?>

以下方式就会报错:
<?php
$flashData = $_POST['message'];
$phpMessage = 'im php message!';
echo "sfsdfghfghfghfghgfhsf"; //不是url参数形式即不是 变量名=值 然后用 & 连接的格式;
?>

<?php
$flashData = $_POST['message'];
$phpMessage = 'im php message!';
echo "klsdfjlsdkfjlksdjflkjsdf"; //这是第一个echo, flash找不到匹配的 url参数形式的字符串;
echo "phpMessage=$phpMessage&flashMessage=$flashData";
?>
这个echo就需要写的很规范了,不能像as2时代乱来了。不过一般时候,还是可以用2进制来监控,只要加载完毕就OK。

下面是一个例子:

//要想成功的解析php文件 必须要有apache文件 也就是说 在测试flash与php通信时一定要有服务器(php用的是apache支撑)

// 一般的 服务端的语言要想被flash端引用 都要打印出来
// 在使用URLLoader时 php端一定会返回一个量 也就是说 php(其他服务端一样)一定要(至少)打印一个量 php 里是echo 或者print asp.net 是Response.WriteLine
// 也就是说只要有一个请求 就一定会有一个返回(用URLLoader时) 用NavigateToURL没有返回
var phpFile:String = "http://localhost/sendData.php";
function callServer(e:MouseEvent):void
{
var Vdata:URLVariables= new URLVariables();
Vdata.name="胡军";
Vdata.age=21;

var urlRequest:URLRequest = new URLRequest(phpFile);

var loader:URLLoader = new URLLoader();

loader.addEventListener(Event.COMPLETE, serverResponse);

urlRequest.data=Vdata;
urlRequest.method=URLRequestMethod.POST;
//loader.dataFormat=URLLoaderDataFormat.VARIABLES // 这句只是传输的方式

loader.load(urlRequest);
//flash.net.navigateToURL(urlRequest);

}

function serverResponse(e:Event):void
{
var loader:URLLoader = URLLoader(e.target);
var variables:URLVariables = new URLVariables(loader.data);

trace("OK");
//timeTxt.text = variables.returnValue;
//trace("来自php的变量returnValue:"+variables.returnValue);
// trace (variables.returnValue is String );//输出为 true
//trace(variables.username);
//trace(variables.id);
trace(variables.rename);// 输出 : 胡军
}

callBtn.addEventListener(MouseEvent.CLICK, callServer);

php端:

<?php
$name=$_POST["name"];
$age=$_POST["age"];
$postData="rename=$name"."&reage=$age";
echo $postData ;
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐