解決ajax不能訪問本地文件問題(利用js跨域原理)
博主自己在開發(fā)一個(gè)無(wú)后臺(tái),只有前臺(tái)的查詢系統(tǒng)時(shí),遇到一個(gè)困難,如何利用Ajax讀取自己的本地json文件,百度、谷歌了下,發(fā)現(xiàn)大部分文章都是在說修改瀏覽器參數(shù),但是自己想想,用戶在使用時(shí),還要修改瀏覽器的參數(shù),這樣顯然降低了用戶體驗(yàn)。自己琢磨了一段時(shí)間,發(fā)現(xiàn)可以利用js跨域原理來(lái)解決這個(gè)瓶頸。將之前要讀取的json文件,變?yōu)閖s對(duì)象文件,這樣就可以讀取這個(gè)文件,然后寫一個(gè)函數(shù)來(lái)對(duì)這個(gè)js對(duì)象進(jìn)行解析。
首先說明下js跨域原理和jsonp這個(gè)技術(shù)(如果說的不詳細(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ì):是通過script標(biāo)簽跨域,來(lái)突破跨域限制請(qǐng)求;返回的數(shù)據(jù)中用一個(gè)函數(shù)來(lái)包裝起來(lái)
jsonp是用來(lái)解決js跨域請(qǐng)求數(shù)據(jù)的問題,原理:是通過script標(biāo)簽可以跨域請(qǐng)求資源的原理間接的請(qǐng)求數(shù)據(jù)。
jsonp需要滿足3個(gè)條件:
1、通過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:在沒有服務(wù)器的情況下

下面是上面html頁(yè)面打開效果圖(為了說明成功讀取本地文件)

貼入上面的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)文章
騰訊與新浪的通過IP地址獲取當(dāng)前地理位置(省份)的接口
通過IP地址獲取當(dāng)前地理位置(省份)的接口,方便大家可以直接使用結(jié)合自己的系統(tǒng)。2010-07-07
基于jQuery實(shí)現(xiàn)數(shù)字滾動(dòng)效果
本文主要分享了基于jQuery實(shí)現(xiàn)數(shù)字滾動(dòng)效果的示例代碼,附源碼下載。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
JQuery為textarea添加maxlength屬性的代碼
textarea默認(rèn)不支持maxlength屬性。所以通過jquery實(shí)現(xiàn)下。具體的看代碼。2010-04-04
jquery ajaxfileuplod 上傳文件 essyui laoding 效果【防止重復(fù)上傳文件】
點(diǎn)擊一次上傳, 當(dāng)上傳操作結(jié)束后才能操作界面,實(shí)現(xiàn)方式是通過 ajaxfileuplod 上傳文件,需要的朋友參考下吧2018-05-05
jQuery實(shí)現(xiàn)的分頁(yè)插件完整示例
這篇文章主要介紹了jQuery實(shí)現(xiàn)的分頁(yè)插件,結(jié)合完整實(shí)例形式分析了jQuery分頁(yè)插件的定義與使用相關(guān)操作技巧,需要的朋友可以參考下2020-05-05
jQuery焦點(diǎn)圖輪播效果實(shí)現(xiàn)方法
這篇文章主要介紹了jQuery焦點(diǎn)圖輪播效果實(shí)現(xiàn)方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了jQuery實(shí)現(xiàn)焦點(diǎn)圖輪播效果的核心代碼與相關(guān)操作技巧,需要的朋友可以參考下2016-12-12
關(guān)于jQuery中.attr()和.prop()的問題探討
寫了幾句代碼在ie8上能正常運(yùn)行,chrome和ff卻不行,prop()方法適用于Boolean值的屬性,添加屬性名稱該屬性就會(huì)生效應(yīng)該使用.prop()者兩點(diǎn)就是他們的區(qū)別吧2013-09-09
jQuery Pagination分頁(yè)插件_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
此jQuery插件為Ajax分頁(yè)插件,一次性加載,故分頁(yè)切換時(shí)無(wú)刷新與延遲,如果數(shù)據(jù)量較大不建議用此方法,因?yàn)榧虞d會(huì)比較慢。下面通過本文給大家分享jQuery Pagination分頁(yè)插件的使用方法及參數(shù)介紹,感興趣的朋友一起看看吧2017-07-07

