Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

flash终究只是客户端技术,所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的,下面的代码演示了如何在flash中打开网页,以及用GET/POST二种方式向服务端发送数据

 
//按下按钮,打开网页

 
btnOpen.addEventListener(MouseEvent.CLICK,

 
function(){

navigateToURL(new URLRequest("http://www.g.cn/search?hl=zh-CN&q=" + encodeURIComponent(txtId.text)),"_blank");

});

//以Get方式发送数据(发送就完事,不会理会服务端是否响应)

btnSend.addEventListener(MouseEvent.CLICK,

function(){

sendToURL(new URLRequest("/default.aspx?q=" + encodeURIComponent(txtId.text)));

});

btnPost.addEventListener(MouseEvent.CLICK,fnPostData);

//以Post方式发送数据(同样:发送就完事,不会理会服务端是否响应)

function fnPostData(e:MouseEvent) {

var _urlReq:URLRequest = new URLRequest();

_urlReq.url = "/default.aspx";

_urlReq.method = URLRequestMethod.POST;

var _data:URLVariables = new URLVariables();

_data.q = "菩提树下的杨过"; //即传递 q = 菩提树下的杨过,注:经测试,Flash会自动对传递的数据做encodeURIComponent处理,所以此外不能再加encodeURIComponent,否则就是二次编码了

_urlReq.data = _data;

sendToURL(_urlReq);

}

服务端可以这样处理:

protected void Page_Load(object sender, EventArgs e)  
{

string q = Request["q"];

if (!string.IsNullOrEmpty(q)) {

string _file = Server.MapPath("~/log.txt");

File.AppendAllText(_file,q + "\t" + Request.HttpMethod + "\t" + DateTime.Now + Environment.NewLine);

}

 
}

如果发送了数据后,还要响应服务端的结果(比如取得服务端的返回值,再继续到Flash中处理),Flash中可这样写:

 
var loader:URLLoader = new URLLoader();

configureListeners(loader);

var request:URLRequest=new URLRequest("/FlashHander.ashx?q=" + encodeURIComponent("菩提树下的杨过"));

try {

loader.load(request);

} catch (error:Error) {

trace("Unable to load requested document.");

}

//定义各种情况的回调函数

function configureListeners(dispatcher:IEventDispatcher):void {

dispatcher.addEventListener(Event.COMPLETE, completeHandler);

dispatcher.addEventListener(Event.OPEN, openHandler);

dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);

dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);

dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

}

//加载完成时,将触发

function completeHandler(event:Event):void {

var loader:URLLoader=URLLoader(event.target);

trace("completeHandler: " + loader.data);

lblReceive.text = loader.data; //本例中,服务端返回: msg=Hello World&Method=GET&q=菩提树下的杨过

var vars:URLVariables=new URLVariables(loader.data);

trace("The Method is " + vars.Method); //服务端返回的字符串中如果有 Method=xxx 这样的字符,则Flash中可以直接用vars.Method进行访问

}

//刚开始请求时,将触发

function openHandler(event:Event):void {

trace("openHandler: " + event);

}

//下载进度发生变化时,将触发(可利用这个做加载进度条)

function progressHandler(event:ProgressEvent):void {

trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);

}

//因安全原因出现错误时,将触发

function securityErrorHandler(event:SecurityErrorEvent):void {

trace("securityErrorHandler: " + event);

}

//http请求状态变化时,将触发

function httpStatusHandler(event:HTTPStatusEvent):void {

trace("httpStatusHandler: " + event);

}

//io错误时,将触发

function ioErrorHandler(event:IOErrorEvent):void {

trace("ioErrorHandler: " + event);

}

服务端FlashHander.ashx可以这样处理:
注意:返回的字符串格式为 name1=value1&name2=value2&name3=value3... 如果name和value中本身包含"="与"&",请注意用其它字符替换掉

/// <SUMMARY>

/// Summary description for FlashHander

/// </SUMMARY>

public class FlashHander : IHttpHandler

{

public void ProcessRequest(HttpContext context)

{

context.Response.ContentType = "text/plain";

context.Response.Write("msg=Hello World&Method=" + context.Request.HttpMethod + "&q=" + context.Request["q"]);

}

public bool IsReusable

{

get

{

return false;

}

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值