jquery解決客戶(hù)端跨域訪(fǎng)問(wèn)問(wèn)題
客戶(hù)端“跨域訪(fǎng)問(wèn)”一直是一個(gè)頭疼的問(wèn)題,好在有jQuery幫忙,從jQuery-1.2以后跨域問(wèn)題便迎刃而解。由于自己在項(xiàng)目中遇到跨域問(wèn)題,借此機(jī)會(huì)對(duì)跨域問(wèn)題來(lái)刨根問(wèn)底,查閱了相關(guān)資料和自己的實(shí)踐,算是解決了跨域問(wèn)題。便記錄下來(lái),以供查閱。
jQuery.ajax()支持get方式的跨域,這其實(shí)是采用jsonp的方式來(lái)完成的。
真實(shí)案例:
$.ajax({
async:false,
url: 'http://www.mysite.com/demo.do', // 跨域URL
type: 'GET',
dataType: 'jsonp',
jsonp: 'jsoncallback', //默認(rèn)callback
data: mydata,
timeout: 5000,
beforeSend: function(){ //jsonp 方式此方法不被觸發(fā)。原因可能是dataType如果指定為jsonp的話(huà),就已經(jīng)不是ajax事件了
},
success: function (json) { //客戶(hù)端jquery預(yù)先定義好的callback函數(shù),成功獲取跨域服務(wù)器上的json數(shù)據(jù)后,會(huì)動(dòng)態(tài)執(zhí)行這個(gè)callback函數(shù)
if(json.actionErrors.length!=0){
alert(json.actionErrors);
}
genDynamicContent(qsData,type,json);
},
complete: function(XMLHttpRequest, textStatus){
$.unblockUI({ fadeOut: 10 });
},
error: function(xhr){
//jsonp 方式此方法不被觸發(fā)
//請(qǐng)求出錯(cuò)處理
alert("請(qǐng)求出錯(cuò)(請(qǐng)檢查相關(guān)度網(wǎng)絡(luò)狀況.)");
}
});
注意:
這種方式其實(shí)是上例$.ajax({..}) api的一種高級(jí)封裝,有些$.ajax api底層的參數(shù)就被封裝而不可見(jiàn)了。
在服務(wù)端通過(guò)callback= request.getParameter("callback") 得到j(luò)Query端隨后要回調(diào)的jsonp32440980
然后返回類(lèi)似:"jsonp32440980("+要返回的json數(shù)組+")";
jquery就會(huì)通過(guò)回調(diào)方法動(dòng)態(tài)加載調(diào)用這個(gè):jsonp32440980(json數(shù)組);
這樣就達(dá)到了跨域數(shù)據(jù)交換的目的.
jsonp的最基本的原理是:動(dòng)態(tài)添加一個(gè)是一致的(qq空間就是大量采用這種方式來(lái)實(shí)現(xiàn)跨域數(shù)據(jù)交換的) 。JSONP是一種腳本注入(Script Injection)行為,所以也有一定的安全隱患。
注意:jquey是不支持post方式跨域的。
這是因?yàn)殡m然采用post +動(dòng)態(tài)生成iframe是可以達(dá)到post跨域的目的(有位js牛人就是這樣把jquery1.2.5 打patch的),但這樣做是一個(gè)比較極端的方式,不建議采用。也可以說(shuō)get方式的跨域是合法的,post方式從安全角度上被認(rèn)為是不合法的,萬(wàn)不得已還是不要post,client端跨域訪(fǎng)問(wèn)的需求看來(lái)也引起w3c的注意了,看資料說(shuō)html5 WebSocket標(biāo)準(zhǔn)支持跨域的數(shù)據(jù)交換,應(yīng)該也是一個(gè)將來(lái)可選的跨域數(shù)據(jù)交換的解決方案。
- 淺談JQuery+ajax+jsonp 跨域訪(fǎng)問(wèn)
- 用jQuery與JSONP輕松解決跨域訪(fǎng)問(wèn)的問(wèn)題
- Jquery 跨域訪(fǎng)問(wèn) Lightswitch OData Service的方法
- jquery異步跨域訪(fǎng)問(wèn)代碼
- jquery 跨域訪(fǎng)問(wèn)問(wèn)題解決方法(筆記)
- jquery下利用jsonp跨域訪(fǎng)問(wèn)實(shí)現(xiàn)方法
- JQuery Ajax 跨域訪(fǎng)問(wèn)的解決方案
- jQuery 跨域訪(fǎng)問(wèn)問(wèn)題解決方法
- jQuery 跨域訪(fǎng)問(wèn)解決原理案例詳解
相關(guān)文章
淺談jquery.fn.extend與jquery.extend區(qū)別
本文給大家簡(jiǎn)單描述了下jquery.fn.extend與jquery.extend的概念以及區(qū)別,十分的實(shí)用,有需要的小伙伴可以參考下。2015-07-07- 在jquery中綁定事件我們可以使用click、change、mouseout、.bind(),live等待事件來(lái)操作,下面我來(lái)給大家介紹jQuery使用向DOM元素綁定事件實(shí)現(xiàn)程序相關(guān)實(shí)例,有需要了解的同不可進(jìn)入?yún)⒖肌?/div> 2015-04-04
使用JQuery FancyBox插件實(shí)現(xiàn)圖片展示特效
本文給大家分享的是使用使用JQuery FancyBox插件實(shí)現(xiàn)圖片展示的3種風(fēng)格的特效,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以查看下2015-11-11jquery.jstree 增加節(jié)點(diǎn)的雙擊事件代碼
本文基于 jsTree 1.0-rc1 版本增加節(jié)點(diǎn)的雙擊事件。2010-07-07jQuery插件HighCharts實(shí)現(xiàn)的2D面積圖效果示例【附demo源碼下載】
這篇文章主要介紹了jQuery插件HighCharts實(shí)現(xiàn)的2D面積圖效果,結(jié)合完整實(shí)例形式分析了jQuery插件HighCharts繪制2D面積圖的相關(guān)步驟與屬性設(shè)置技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-03-03jQuery實(shí)現(xiàn)每日秒殺商品倒計(jì)時(shí)功能
這篇文章主要介紹了 jQuery實(shí)現(xiàn)每日秒殺商品倒計(jì)時(shí)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09基于jQuery+HttpHandler實(shí)現(xiàn)圖片裁剪效果代碼(適用于論壇, SNS)
上次發(fā)了幾個(gè)jQuery的插件和些心得, 很多園友(也許是自己站上的)發(fā)郵件希望能提供更多的源碼, 正好這次有個(gè)同學(xué)希望在自己的壇子上掛個(gè)圖片裁剪以生成頭像的功能, 于是幫忙寫(xiě)了這么個(gè)插件.也許很多園友用得著, 就一并發(fā)上來(lái)啦.2011-09-09ExtJs動(dòng)態(tài)生成treepanel的Json格式
這篇文章主要介紹了ExtJs動(dòng)態(tài)生成treepanel的Json格式的相關(guān)資料,需要的朋友可以參考下2015-07-07最新評(píng)論