JQuery的Ajax跨域请求要义

本文介绍了一种使用JSONP解决跨域访问问题的方法,并详细解释了如何设置前端Ajax请求及后端处理流程。

        今天自己用java写了一个servlet,自运行一个服务开启8080端口,然客户端利用ajax 发post请求调用8080端口servlet。代码片段大致如下:

$.ajax({ 
                                 type: "post"
                                 url: "Default.aspx"
                                 dataType: "text"

data: 'username='+username+'&password='+password,
                                 success: function (data) { 
                                         alert(data)
                                 }, 
                                 error: function (XMLHttpRequest, textStatus, errorThrown) { 
                                         alert(errorThrown); 
                                 } 
        });
 

在ie、ff、chrome三大浏览器上测试,ie完全没有反映,ff和chrome执行的时候,发现后台其实是调用servlet,后台有东西输出。在网上查询,说是涉及到跨域访问,于是我将js所在的网页放到8080服务器下执行,三大浏览器访问,果然均返回“sucess”。说明问题确实是跨域造成的。

有文章说利用jsnop解决跨域问题。经过一番折腾,终于调通了,现总结如下,利用jsnop方式代码如:

要素一:dataType改成JSONP,必须要追加jsonp: "callbackparam"callbackparam可以自定义。这个是传给后台用的回调函数名字(是个参数),jsonpCallback写不写无所谓,不写的话,程序会随机生成一个函数名,如jQuery1720565933280158788_1372490746392,如果定义了,程序就会用定义的名字,如下面例子success_jsonpCallback

$.ajax({ //一个Ajax过程 
type: "post", //以post方式与后台沟通 
url : "http://localhost:8080/LoadClas/loadcls", //与此php页面沟通 
dataType:'JSONP',//从php返回的值以 JSON方式 解释 
data: 'username='+username+'&password='+password,
jsonp: "callbackparam",//服务端用于接收callback调用的function名的参数
jsonpCallback:"success_jsonpCallback",//callback的function名称

success: function(json){//如果调用php成功
alert(json[0].
msg


},
error: function (XMLHttpRequest, textStatus, errorThrown) { 
                   alert(errorThrown); 
         } 

}); 

要素二:后台要jsonp: "callbackparam"值获得。

String callbackparam = request.getParameter("callbackparam");

要素三:返回值要是json串

格式必须是:String jsonString = callbackparam + "([{'key':'value'}])" 这种形式。


这里需要特别注意的是很多文章都没有说清楚ajax参数里jsonp和jsonpCallback是怎么回事。

就我个人的从程序的理解来解释的话,之所以定义这两个参数,是为了给后台拼装json格式规则做准备。参见我的要素三,json前缀callbackparam就是通过这两个参数获得的。jsonp定义了request的key,即request.getParameter("callbackparam");jsonpCallback定义了key对应的value值,即success_jsonpCallback。所以ajax向后台请求的时候,原理上地址是“XXX.do?callbackparam=success_jsonpCallback&username=aaa&password=bbb”。

如果没有定义jsonpCallback,那么如我前面所述,程序会自动生成一个随机的函数名。输出的json串类似于

success_jsonpCallback([{'bbb':'ccc'}])

jQuery1720565933280158788_1372490746391([{'bbb':'ccc'}])

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值