解決ajax不能訪問(wèn)本地文件問(wèn)題(利用js跨域原理)
博主自己在開(kāi)發(fā)一個(gè)無(wú)后臺(tái),只有前臺(tái)的查詢系統(tǒng)時(shí),遇到一個(gè)困難,如何利用Ajax讀取自己的本地json文件,百度、谷歌了下,發(fā)現(xiàn)大部分文章都是在說(shuō)修改瀏覽器參數(shù),但是自己想想,用戶在使用時(shí),還要修改瀏覽器的參數(shù),這樣顯然降低了用戶體驗(yàn)。自己琢磨了一段時(shí)間,發(fā)現(xiàn)可以利用js跨域原理來(lái)解決這個(gè)瓶頸。將之前要讀取的json文件,變?yōu)閖s對(duì)象文件,這樣就可以讀取這個(gè)文件,然后寫(xiě)一個(gè)函數(shù)來(lái)對(duì)這個(gè)js對(duì)象進(jìn)行解析。
首先說(shuō)明下js跨域原理和jsonp這個(gè)技術(shù)(如果說(shuō)的不詳細(xì),可自行百度、谷歌)
src可以跨域請(qǐng)求,但是這個(gè)資源不能作為js解析,資源不是js,所以解析json的時(shí)候會(huì)出錯(cuò)
中間是一個(gè)對(duì)象,調(diào)用fun把這個(gè)對(duì)象傳入進(jìn)去,
定義的function fun可以看作是請(qǐng)求成功后回調(diào)函數(shù)
jsonp本質(zhì):是通過(guò)script標(biāo)簽跨域,來(lái)突破跨域限制請(qǐng)求;返回的數(shù)據(jù)中用一個(gè)函數(shù)來(lái)包裝起來(lái)
jsonp是用來(lái)解決js跨域請(qǐng)求數(shù)據(jù)的問(wèn)題,原理:是通過(guò)script標(biāo)簽可以跨域請(qǐng)求資源的原理間接的請(qǐng)求數(shù)據(jù)。
jsonp需要滿足3個(gè)條件:
1、通過(guò)script的src請(qǐng)求資源
2、請(qǐng)求的資源中用回調(diào)函數(shù)的將數(shù)據(jù)進(jìn)行包裹
3、調(diào)用方要定義回調(diào)函數(shù)
下面貼入demo來(lái)演示Ajax讀取本地文件,ps:在沒(méi)有服務(wù)器的情況下
下面是上面html頁(yè)面打開(kāi)效果圖(為了說(shuō)明成功讀取本地文件)
貼入上面的test.html代碼
<script type="text/javascript" src="js/jquery-easyui-1.3.2/jquery-1.8.0.min.js"></script> <script> function fun(data){ //var dataj=JSON.parse(data.pro); //可以將json字符串轉(zhuǎn)換成json對(duì)象 alert(data.pro); var obj = eval(data.pro); //alert(obj.name); //$.each(obj,function(index,position){ //alert(+position['name']); //html+="<option value='"+position['name']+"'>"+position["name"]+"</option>"; //}); for(var i=0;i<obj.length;i++){ alert(obj[i].name); } alert(1); } </script>
/*下面的代碼,是之前利用ajax來(lái)讀取本地json文件的代碼,是不能實(shí)現(xiàn)的,運(yùn)行時(shí),可以不貼入下面的代碼*/ <script type="text/javascript" src="json/abc.json"></script> <script> $(function(){ alert($); /*$.ajax({ type: "GET", url: "json/positionMenu.json", dataType: "json", success:function(data){ alert(data); } });*/ }) </script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
完美解決jQuery符號(hào)$與其他javascript 庫(kù)、框架沖突的問(wèn)題
下面小編就為大家?guī)?lái)一篇完美解決jQuery符號(hào)$與其他javascript 庫(kù)、框架沖突的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08JQuery實(shí)現(xiàn)簡(jiǎn)單的復(fù)選框樹(shù)形結(jié)構(gòu)圖示例【附源碼下載】
這篇文章主要介紹了JQuery實(shí)現(xiàn)簡(jiǎn)單的復(fù)選框樹(shù)形結(jié)構(gòu)圖,涉及jQuery頁(yè)面元素屬性動(dòng)態(tài)操作與事件響應(yīng)相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2019-07-07jQuery實(shí)現(xiàn)立體式數(shù)字滾動(dòng)條增加效果
這篇文章主要介紹了jQuery立體式數(shù)字滾動(dòng)條增加的相關(guān)資料,代碼簡(jiǎn)單易懂,非常不錯(cuò),需要的朋友可以參考下2016-12-12jquery實(shí)現(xiàn)百分比記分進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)百分比記分進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04jQuery插件ContextMenu自定義圖標(biāo)
這篇文章主要為大家詳細(xì)介紹了jQuery插件ContextMenu自定義圖標(biāo)的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03jQuery經(jīng)過(guò)一段時(shí)間自動(dòng)隱藏指定元素的方法
這篇文章主要介紹了jQuery經(jīng)過(guò)一段時(shí)間自動(dòng)隱藏指定元素的方法,實(shí)例分析了兩種比較常用的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03jQuery 動(dòng)畫(huà)彈出窗體支持多種展現(xiàn)方式
今天剛寫(xiě)的利用jQuery動(dòng)畫(huà)彈出窗體,支持了string、Ajax、iframe、controls四種展現(xiàn)方式,具體細(xì)節(jié)下面慢慢介紹,先看效果圖。2010-04-04解決jquery appaend元素中id綁定事件失效的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決jquery appaend元素中id綁定事件失效的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09JavaScript的jQuery庫(kù)中ready方法的學(xué)習(xí)教程
這篇文章主要介紹了JavaScript的jQuery庫(kù)中ready方法的學(xué)習(xí)教程,包括ready的相關(guān)簡(jiǎn)短寫(xiě)法,rally cool,需要的朋友可以參考下2015-08-08利用jQuery treetable實(shí)現(xiàn)樹(shù)形表格拖拽詳解
這篇文章主要為大家介紹了如何利用jQuery treetable實(shí)現(xiàn)樹(shù)形表格拖拽功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-06-06