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

以为在as3里面和后台通讯也是那么简单的事情,但实践告诉你,还是要遇到很多麻烦,例如不像as2里面loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoaderURLLoaderDataFormatURLStreamURLVariables

     在使用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 ;

?>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值