jquery跨域请求
解决浏览器非同源跨域问题
JSONP:JSONWITHPIDDING是一种非官方的协议。
允许在服务器端生成javaScripttag返回至客户端,jsonp是一种scripttag的注入将server返回的response添加到页面实现特定功能.
浏览器同源策略:浏览器限制脚本只能在相同协议、同域名、同端口的脚本进行交互。包括共享和传递参数、变量等。cookie的传递也遵循同源策略
如何解决跨域访问呢?那就要借助浏览器的一个特性:尽管浏览器不允许页面中的脚本程序跨域读取数据,但却允许HTML引用跨域的资源,如图片,CSS和脚本程序。对于脚本程序的引用比较特殊,它被浏览器解析以后,就和本地的脚本程序别无二致且可立即进行解释并执行。
通过<script>标记的使用,就可从服务端直接返回可执行的JavaScript函数调用或者JSON数据。
JSONP原理与实现
首先在客户端注册一个callback,然后把callback的名字传给服务器。此时,服务器先生成JSON数据。然后以JavaScript语法的方式,生成一个function,function名字就是传递上来的参数jsonp.
然后,将JSON数据直接以入参的方式,放置到function中,这样就生成了一段js语法的文档,返回给客户端。
最后,在客户端浏览器中解析script标签,并执行返回的JavaScript文档,此时数据作为参数,传入到了客户端预先定义好的回调函数里(动态执行回调函数)。
示例:
<script type="text/javascript"> function jsonpCallback(result){ alert(result[1].name); } </script> <script type="text/javascript"src="http://localhost:8080/Jsonp/jsonp.jsp?callback=jsonpCallback"></script>
jquery代码
<script type="text/javascript"> $.getJSON("http://localhost:8080/Jsonp/jsonp.jsp?callback=?", function(json){ alert(json[0].name); }); </script> //[b]ajaxJson[/b] var qsData = {'searchWord':$("#searchWord").attr("value"),'currentUserId':$("#currentUserId").attr("value"),'conditionBean.pageSize':$("#pageSize").attr("value")}; $.ajax({ async:false, url: http://跨域的dns/document!searchJSONResult.action, type: "GET", dataType: 'jsonp', jsonp: 'jsoncallback', data: qsData, timeout: 5000, beforeSend: function(){ //jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了 }, success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数 } }); //[b]java端[/b] //callback 客户端传递过来的回调函数的名称 String callback = request.getParameter("callback"); out.print(callback+"([ { name:'John',age:'19'},{ name:'joe',age:'20'}] );"); out.print(callback);
相关推荐
hhanbj 2020-11-17
81427005 2020-11-11
nmgxzm00 2020-11-10
ifconfig 2020-10-14
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22