Spring中的aware接口详情
228
2022-11-04
PhoneGap:JS跨域请求
PhoneGap开发,理论上好处多多。但因为javascript是其中的主角,并且是直接存放于手机,跟服务器数据交互,就会有一个跨域访问的问题。
当然,这个问题肯定有解决方案,不然的话,这种利用PhoneGap等的混合APP模式就没有存在的价值。
网上的方案有很多,比如获取数据,可以采用Jsonp。
但提交数据呢?
首先可以在服务器端做一些配置,允许跨域请求。比如,对于ASP.NET开发的网站,可以修改web.config,加上:
web.config:
然后是客户端JS:
$(function () { $("#divHello").html("Hello PhoneGap"); forServer();}); var ashx = "forServer(){ var xhr; xhr = new XMLHttpRequest(); if (xhr){ xhr.onerror = function(){alert("错误");}; //xhr.timeout = 60000;//IE9加上这个属性会报错,不知道为什么,其他版本未测试 xhr.ontimeout = function(){alert("超时");}; xhr.onload = function(){ var data = $.parseJSON(xhr.responseText); $("#divData").html(data.data); }; xhr.open("post", ashx,true); xhr.setRequestHeader("Content-type","application/x- xhr.send("p1=guangzhou tianhe"); } else{ alert("Failed to create"); }}
服务器端test.ashx
public class test1 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; context.Response.Charset = "utf-8"; string res = String.Format(@"{{""data"":""{0}""}}", context.Request.Form["p1"] ); context.Response.Write(res); } public bool IsReusable { get { return false; } } }
经验总结:
1、$.getJSON()的方式,Chrome下可以,IE死活不行,在IE浏览器下,按F12查看,根本没有连接指定的.ashx,直接拒绝。改用XMLHttpRequest,两种浏览器都能接受。放在安卓手机模拟器里也能正常运行
2、形如 这种方式,在安卓手机模拟器里是连不上的,要改成IP或域名: ,但其实貌似很是不行(再次鄙视微软,不知道为什么会搞出IE这种怪物,左摇右摆,到处是版本兼容问题,让人抓狂。)
function getData(){ $.getJSON( ashx ,{"uid" : Date()} ,function(data) { $("#divData").html(data.data); });}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~