解决前端Html5和Egret跨域请求Http数据的例子
来源:互联网 发布:linux ping指定接口 编辑:程序博客网 时间:2024/05/22 02:09
最近在做平台的接入,需要做一些像其他web服务器请求相关数据的功能。那么就遇到了一个跨域请求网络数据的问题了。这里记录一下相关的解决方案。
一、服务端修改Header
- 最主要是服务端支持服,返回的时候必须增加一个Header
AddHeader("Access-Control-Allow-Origin","*");
实际部署的时候,* 应该修改为指定的域名
2. 客户端使用XMLHttpRequest,但是也要增加一个Header
setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
后面看具体的使用例子了。
二、使用XMLHttpRequest
var XMLHttp = new XMLHttpRequest();XMLHttp.withCredentials = false; //不用认证 XMLHttp.onreadystatechange = function(){ if(XMLHttp.readyState === 4) //4表示准备完成 { if(XMLHttp.status === 200) //200表示回调成功 { console.log(XMLHttp.responseText); //返回的数据,这里返回的是json格式数据 var result = JSON.parse(XMLHttp.responseText); if(result.errorCode == 0) { //处理实际的返回数据 } else { alert(result.errorMessage); } } else { alert("Request was failure: " + XMLHttp.status); } }};//测试urlvar url = 'http://192.168.0.166:8080/game/cmgeLogin';XMLHttp.open('POST', url, true); //post传递//使用 XMLHttp 来模仿表单提交,加一个请求头部。XMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");XMLHttp.send(); //发送数据
如果是老版本的ID,还得做兼容的检测
getXmlHttpRequest = function() { if (window.XMLHttpRequest) { //主流浏览器提供了XMLHttpRequest对象 return new XMLHttpRequest(); } else if (window.ActiveXObject) { //低版本的IE浏览器没有提供XMLHttpRequest对象 //所以必须使用IE浏览器的特定实现ActiveXObject return new ActiveXObject("Microsoft.XMLHttpRequest"); }};
三、使用白鹭的API
使用Egret自己封装的RES就非常简洁了,普通页面返回文本
RES.getResByUrl(url,function(data:string):void{ console.log(data);},this,RES.ResourceItem.TYPE_TEXT);
处理返回json格式的结果
RES.getResByUrl(url,function(data:Object):void{ console.log(data);},this,RES.ResourceItem.TYPE_JSON);
使用egret.URLLoader
var url:string = this.config.loginUrl;//请求登录服务器this.loginLoader = new egret.URLLoader();this.loginLoader.dataFormat = egret.URLLoaderDataFormat.TEXT;var request:egret.URLRequest = new egret.URLRequest();request.requestHeaders = [new egret.URLRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8")];request.url = this.config.loginUrl + "?gameUID=sword&channelUID=cmge&cmgePlayerId=lgl123321&loginTime=1496741695&sign=23456789";this.loginLoader.addEventListener(egret.Event.COMPLETE,function(evt:egret.Event):void{ var data:string = this.loginLoader.data; console.log(data);},this);this.loginLoader.load(request);
也可以使用白鹭的HttpRequest
var httpRequest:egret.HttpRequest = new egret.HttpRequest();httpRequest.responseType = egret.HttpResponseType.TEXT;httpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");httpRequest.addEventListener(egret.Event.COMPLETE,function(evt:egret.Event):void{ var data:string = httpRequest.response; console.log(data);},this);httpRequest.open("http://192.168.0.166:8080/game/cmgeLogin",egret.HttpMethod.POST);httpRequest.send();
这里要注意的是,必须增加一个RequestHeader,也就是
"Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"
否则会提示下面的错误的:
XMLHttpRequest cannot load http://192.168.0.166:8080/game/cmgeLogin. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 400.Uncaught Error: #1011: 流错误。URL: http://192.168.0.166:8080/game/cmgeLogin _error (anonymous function)
基本上,Egret所封装的api足够使用得我们去从其他的web服务器获取所需要的数据了。
阅读全文
0 0
- 解决前端Html5和Egret跨域请求Http数据的例子
- 解决前端Html5和Egret跨域请求Http数据的例子
- 解决egret跨域问题
- angularjs和jquery前端发送以http请求formdata数据
- cocos2d-js 中封装HTML5和Native的Http请求
- HTTP请求跨域问题,解决模棱两可。
- HTTP请求和数据安全
- http请求和数据安全
- HTTP请求和数据安全
- HTTP请求和数据安全
- HTTP请求和数据安全
- HTTP请求和数据安全
- Egret 简单的动画的例子
- 跨域请求HTTP数据之JSONP
- Netty 处理简单HTTP请求的例子
- 前端开发-数据分页请求和删除
- 前端性能优化的方法和工具,减少http请求的次数和速度
- 使用put请求时不能获得前端的数据问题的解决
- HDU 1035 Robot Motion 简单模拟(挺有趣的一题)
- 基数排序
- 新人产品分析——第三步(5)
- 【Python】之 Tips
- jenkins + maven + svn + tomcat 搭建自动构建,自动部署,持续集成环境
- 解决前端Html5和Egret跨域请求Http数据的例子
- 自定义内容提供器MyProvider
- angualr2封装组件(二)function怎么调用ts类的方法
- 新人产品分析——最后的总结
- BZOJ4866: [Ynoi2017]由乃的商场之旅 莫队
- Jquery通过ajax实现三级联动
- ACL配置
- canvas.save() 和 canvas.restore() 的作用
- 文件目录结构显示与文件搜索