使用jsonp及jquery的$.ajax解决跨域问题
生活随笔
收集整理的這篇文章主要介紹了
使用jsonp及jquery的$.ajax解决跨域问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
跨域是指代碼獲得或者更改從另一個(gè)域名下獲得的文件或者信息。當(dāng)執(zhí)行這類操作時(shí),一般會(huì)報(bào)“拒絕操作”,“無(wú)權(quán)限”等 一般我利用三種方法: 服務(wù)器后端處理,我直接發(fā)送把另一個(gè)域當(dāng)做get/post參數(shù)過(guò)去,服務(wù)器再直接利用http請(qǐng)求得到返回值,輸出給我,作為success iframe跨域,現(xiàn)在我已經(jīng)不用了。。 jsonp。只是了解,最近通過(guò)項(xiàng)目加深了印象。 原理是頁(yè)面中使用動(dòng)態(tài)代碼元素,代碼的源指向服務(wù)地址并在自己的代碼中加載數(shù)據(jù)。當(dāng)這些代碼加載執(zhí)行的時(shí)候,就不會(huì)出現(xiàn)“禁止訪問(wèn)”的問(wèn)題。 原生js的demo(參照網(wǎng)上) [crayon-50361f9fdae69/] 這樣就可以通過(guò)執(zhí)行ticker.js,得到data,而這個(gè)ticker.js,是沒(méi)有啥限制的。 項(xiàng)目實(shí)戰(zhàn) [crayon-50361f9fdb24e/] 后端: [crayon-50361f9fdb636/] 這么寫有幾個(gè)要點(diǎn)在里面: 1 jsonp是需要后端配合的,因此他需要接受一個(gè)參數(shù)叫做 callbackparam。當(dāng)然這個(gè)名字可以自己定義。 例子: ($funparam=$_REQUEST["callbackparam"];) 輸出也要嚴(yán)格的是這種格式: $funname.’(‘.$pageContents.’)’ ? 即 回調(diào)函數(shù)名 + json 以這個(gè)例子來(lái)說(shuō),輸出為 111({“message”:”ok”,”list”:[{"gridcode":"5916566401","y":"39.801185","x":"116.80606"},{"gridcode":"5816274211","y":"38.870651","x":"116.905822"}]} ) 這種格式 ,這樣的格式 經(jīng)過(guò)jquery解析,才會(huì)變成 {“message”:”ok”,”list”:[{"gridcode":"5916566401","y":"39.801185","x":"116.80606"},{"gridcode":"5816274211","y":"38.870651","x":"116.905822"}]} 這就是我們想要的json 2 前端的幾個(gè)參數(shù)解釋 傳統(tǒng)寫法 [crayon-50361f9fdba1e/] [crayon-50361f9fdbe03/] 支持jsonp的寫法 [crayon-50361f9fdc1ee/] 當(dāng)我們這么寫時(shí),jq會(huì)認(rèn)為我們?cè)谧鰆sonp操作,因此會(huì)幫我們處理好回調(diào)函數(shù),自動(dòng)將callbackparam加入url中。返回就是json對(duì)象了。 [crayon-50361f9fdc5d3/] ajax請(qǐng)求參數(shù)說(shuō)明: dataType??String 預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery?將自動(dòng)根據(jù)?HTTP?包?MIME?信息來(lái)智能判斷,比如XML?MIME類型就被識(shí)別為XML。在1.4中,JSON就會(huì)生成一個(gè)JavaScript對(duì)象,而script則會(huì)執(zhí)行這個(gè)腳本。隨后服務(wù)器端返回的數(shù)據(jù)會(huì)根據(jù)這個(gè)值解析后,傳遞給回調(diào)函數(shù)。可用值: “xml”:?返回?XML?文檔,可用?jQuery?處理。 “html”:?返回純文本?HTML?信息;包含的script標(biāo)簽會(huì)在插入dom時(shí)執(zhí)行。 “script”:?返回純文本?JavaScript?代碼。不會(huì)自動(dòng)緩存結(jié)果。除非設(shè)置了“cache”參數(shù)。”’注意:”’在遠(yuǎn)程請(qǐng)求時(shí)(不在同一個(gè)域下),所有POST請(qǐng)求都將轉(zhuǎn)為GET請(qǐng)求。(因?yàn)閷⑹褂肈OM的script標(biāo)簽來(lái)加載) “json”:?返回?JSON?數(shù)據(jù)?。 “jsonp”:?JSONP?格式。使用?JSONP?形式調(diào)用函數(shù)時(shí),如?“myurl?callback=?”?jQuery?將自動(dòng)替換???為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。 “text”:?返回純文本字符串 jsonp???String 在一個(gè)jsonp請(qǐng)求中重寫回調(diào)函數(shù)的名字。這個(gè)值用來(lái)替代在“callback=?”這種GET或POST請(qǐng)求中URL參數(shù)里的“callback”部分,比如{jsonp:’onJsonPLoad’}會(huì)導(dǎo)致將“onJsonPLoad=?”傳給服務(wù)器。 jsonpCallback???String [...]
轉(zhuǎn)載于:https://www.cnblogs.com/99f2e/archive/2012/04/15/2653118.html
總結(jié)
以上是生活随笔為你收集整理的使用jsonp及jquery的$.ajax解决跨域问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 演练:创建和使用静态库 (C++)
- 下一篇: 选择“关机”还是“睡眠”?