as3 使用post方法通信nodejs后端
ActionScript3 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| package {
import flash.net.*; import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLLoaderDataFormat; import flash.net.URLVariables; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.events.SecurityErrorEvent; import flash.system.fscommand;
public class postTest{
public function postTest() { // constructor code sendData(); }
private var loader: URLLoader; private function sendData(): void { var url: String = "http://127.0.0.1:8066/login";
var _data: URLVariables = new URLVariables(); /*_data.aa = txt1.text; _data.bb = txt2.text;*/ _data.Name = "测试1";
var _request: URLRequest = new URLRequest(); _request.url = url; _request.method = URLRequestMethod.POST; _request.data = _data; //方法一 sendToURL 但是没有数据回调 //sendToURL(_request); //方法二 URLLoader 有数据回调 loader = new URLLoader();
//loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, loader_complete); // loader.addEventListener(Event.OPEN, loader_open); loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus); // loader.addEventListener(ProgressEvent.PROGRESS, loader_progress); loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security); loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
loader.load(_request); //loader.load(new URLRequest(url + "?aa=11&bb=22")); } private function loader_complete(e: Event): void { trace("Event.COMPLETE"); trace("目标文件的原始数据 (纯文本) : \n" + loader.data); trace(e.target.data); } private function loader_open(e: Event): void { trace("Event.OPEN"); trace("读取了的字节 : " + loader.bytesLoaded); } private function loader_httpStatus(e: HTTPStatusEvent): void { trace("HTTPStatusEvent.HTTP_STATUS"); trace("HTTP 状态代码 : " + e.status); if (e.status == 200) { //mc_blank.visible = false; } else if (e.status == 404) { //mc_blank.visible = true; fscommand("quit"); } } private function loader_progress(e: ProgressEvent): void { trace("ProgressEvent.PROGRESS"); trace("读取了的字节 : " + loader.bytesLoaded); trace("文件总字节 : " + loader.bytesTotal); } private function loader_security(e: SecurityErrorEvent): void { trace("SecurityErrorEvent.SECURITY_ERROR"); } private function loader_ioError(e: IOErrorEvent): void { trace("IOErrorEvent.IO_ERROR"); } } }
|
注意:
1.单独的使用swf访问nodejs后端的话,这样就可以OK了。
2.如果是把swf嵌入到html里,通过html打开,那这样就会遇到跨域问题,报错如图:

解决方案:在nodejs程序的public目录下添加一个crossdomain.xml文件,然后就OK了。
nodejs里目录结构

crossdomain.xml内容
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="UTF-8"?> <cross-domain-policy> <!--<allow-access-from domain="www.xx.com" />--> <!--<allow-access-from domain="*.xx.com" />--> <!--<allow-access-from domain="127.0.0.8013" />--> <allow-access-from domain="*" /> </cross-domain-policy>
|
关于crossdomain.xml文件格式说明,
请看这篇文章 Flash跨域传输数据 crossdomain.xml
Donate