★其它通讯方式原理浅谈
→昨天在蓝色理想偶然发现一个帖子,是蓝色前斑竹“手工感情”写的,其中总结了FLASH与ASP通讯的三种常见方法,包括loadVariables,LoadVars和XML,跟贴还有一些比较深入的讨论,我觉得很好,大家对哪种方式有兴趣的话不妨看一下前辈的帖子,火山这里就不再唠叨了。只有一种方式他们没提到,就是getURL,下面我就着重讲一下这种通讯方式。
→getURL的特别之处在于它能打开一个新的ASP网页,并使这个网页接收到传递的变量,这样ASP网页就能根据这个变量进行各种设置和显示了,我的FLASH BLOG中就利用了这个技术。遗憾的是,getURL无法指定传递变量的个数,它会非常机械的把同一层级下的所有变量都传递给ASP,如果你把调用getURL函数的语句和大量其它AS语句都混在一起,势必会传递大量垃圾变量,解决的方法是把要传递的变量和调用getURL函数的语句都写在一个独立的MC中。下面我简单演示一下它的用法:
1,先在同一目录下建立一个“geturl.asp”文件和“geturl.fla”文件。
2,在“geturl.asp”中输入下面的代码:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//接收变量
var neirong1=Request("neirong1_flash");
var neirong2=Request("neirong2_flash");
var neirong3=Request("neirong3_flash");
//显示变量内容
Response.Write("内容1的值是"+neirong1+"<br>");
Response.Write("内容2的值是"+neirong2+"<br>");
Response.Write("内容3的值是"+neirong3);
%>
<%
//接收变量
var neirong1=Request("neirong1_flash");
var neirong2=Request("neirong2_flash");
var neirong3=Request("neirong3_flash");
//显示变量内容
Response.Write("内容1的值是"+neirong1+"<br>");
Response.Write("内容2的值是"+neirong2+"<br>");
Response.Write("内容3的值是"+neirong3);
%>
3,再在“geturl.fla”中建立一个按钮“anniu_btn”,并在贞上写代码:
var neirong1_flash = "neirong1";
var neirong2_flash = "neirong2";
anniu_btn.onRelease = function() {
getURL("geturl.asp", "_blank", "get");
};
var neirong2_flash = "neirong2";
anniu_btn.onRelease = function() {
getURL("geturl.asp", "_blank", "get");
};
→这样前期工作就完成了,下面我们来进行一系列对比性的测试:
①直接发布测试,当我们点击按钮的时候,会发现新打开了“geturl.asp”,页面显示:
①直接发布测试,当我们点击按钮的时候,会发现新打开了“geturl.asp”,页面显示:
内容1的值是neirong1
内容2的值是neirong2
内容3的值是undefined
内容2的值是neirong2
内容3的值是undefined
看来我们确实接收到变量neirong1_flash和neirong2_flash了,由于neirong3_flash我们在FLASH中没有定义,所以ASP中得到undefined。现在我们注意观察ASP网页的URL后缀:
?neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
这个后缀经过了URL编码,翻译过来其实是:
?neirong1_flash=neirong1&neirong2_flash=neirong2
哈哈,它的格式大家是不是觉得非常熟悉呢?答对了!就是我们在前面一直强调的“变量/值”配对,它的变量传递原理与LV遵循的是同一规则!怎么样?现在体会到什么是一通百通,触类旁通了吧:)需要解释的一点是,当传递多个“变量/值”对的时候,他们之间用“&”分隔,与TXT中的数据格式又相同了。
②把“geturl.fla”中“getURL”函数中的“get”传递方式改为“post”再测试一下,你会发现ASP网页在浏览器URL中的后缀没有了,但网页显示结果不变。
③现在我们再把“geturl.fla”中“getURL”函数改成下面的形式:
②把“geturl.fla”中“getURL”函数中的“get”传递方式改为“post”再测试一下,你会发现ASP网页在浏览器URL中的后缀没有了,但网页显示结果不变。
③现在我们再把“geturl.fla”中“getURL”函数改成下面的形式:
getURL("geturl.asp?neirong3_flash=neirong3", "_blank", "get");
发布测试,我们会发现点击按钮后,打开的ASP网页显示内容发生了变化,neirong3接收到了值,网页显示内容如下:
内容1的值是neirong1
内容2的值是neirong2
内容3的值是neirong3
内容2的值是neirong2
内容3的值是neirong3
再观察浏览器URL后缀:
?neirong3_flash=neirong3&neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
可以发现多了一个“neirong3_flash=neirong3&”,而且它没进行URL编码,这点火山也不太理解,为什么把变量直接写在ASP文件调用语句中就不进行URL编码了呢?希望有前辈高手点明,先替大家一起谢谢了。
这里需要重点提示的是:以前见有些人说“getURL”函数可以通过在调用的文件名后加参数来传递指定的变量,这其实是视觉上的误导。getURL永远都是传递所有的变量,只不过那些垃圾变量,如果你不测试的话,无法看到它们而已。
④最后再送大家一个大礼来给这篇教程画上一个完美的句号,这个礼物是“测试的思考方式”:
变量有三个
变量传递的写法有两种:直接写在文件名后或者在时间轴声明并赋值
变量传递的方式有两种:get和post
所以测试的可能性一共就有:3*2*2=12种,我只做了4种代表性的,其它的留给读者自己。
呵呵,怎么样,这种思想很容易理解吧?
可惜道理大家都懂,实践总是很难!
变量有三个
变量传递的写法有两种:直接写在文件名后或者在时间轴声明并赋值
变量传递的方式有两种:get和post
所以测试的可能性一共就有:3*2*2=12种,我只做了4种代表性的,其它的留给读者自己。
呵呵,怎么样,这种思想很容易理解吧?
可惜道理大家都懂,实践总是很难!