使用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 ;
?>
在使用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 ;
?>
相关文章推荐
- 【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)
- php使用NuSoap调用java/C# webservice的中文乱码问题
- 使用Report Service发现的一些问题
- [网络通信]使用fork的TCP通信服务端重起bind问题
- 【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- 【C/S通信交互之Http篇】使用Curl与Jetty(Server)实现手机网游Http通信框架&解决curl.h头文件找不到问题
- 解决使用WINHTTP时的一些编译通不过的问题
- 【ZZ】一些在php中使用header函数设置http头的示例方法
- Android 使用URL,URLConnection,HttpConnection 不能通信的问题
- 使用HTTPSERVICE的缓存问题
- AIDL通信 android 在5.0以使用隐式Intent方式来启动Service的问题
- Android客户端与PHP服务端通信(五)---移植使用极光推送
- Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据 推荐
- PHP使用file_get_contents或curl请求https的域名内容为空或Http 505错误的问题排查方法
- Android客户端与PHP服务端通信(三)---极光推送注册使用
- 使用Report Service发现的一些问题
- Flex中使用HttpService和WebService方式通信
- Android之Http通信——5.开发中遇到的一些问题
- flex 通过HTTPService与php通信