ActionScript3 使用Post方法通信nodejs后端

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
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Peng Xiang
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信