解決ajax不能訪問本地檔案(利用js跨域原理)__js

來源:互聯網
上載者:User
博主自己在開發一個無後台,只有前台的查詢系統時,遇到一個困難,如何利用Ajax讀取自己的本地json檔案,百度、Google了下,發現大部分文章都是在說修改瀏覽器參數,但是自己想想,使用者在使用時,還要修改瀏覽器的參數,這樣顯然降低了使用者體驗。自己琢磨了一段時間,發現可以利用js跨域原理來解決這個瓶頸。將之前要讀取的json檔案,變為js對象檔案,這樣就可以讀取這個檔案,然後寫一個函數來對這個js對象進行解析。 首先說明下js跨域原理和jsonp這個技術(如果說的不詳細,可自行百度、Google) src可以跨域請求,但是這個資源不能作為js解析,資源不是js,所以解析json的時候會出錯 中間是一個對象,調用fun把這個對象傳入進去, 定義的function fun可以看作是請求成功後回呼函數 jsonp本質:是通過script標籤跨域,來突破跨域限制請求;返回的資料中用一個函數來封裝起來
jsonp是用來解決js跨域請求資料的問題,原理:是通過script標籤可以跨域請求資源的原理間接的請求資料。
jsonp需要滿足3個條件: 1、    通過script的src請求資源 2、    請求的資源中用回呼函數的將資料進行包裹 3、    調用方要定義回呼函數
下面貼入demo來示範Ajax讀取本地檔案,ps:在沒有伺服器的情況下
下面是上面html頁面開啟效果圖(為了說明成功讀取本地檔案)


貼入上面的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字串轉換成json對象              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來讀取本地json檔案的代碼,是不能實現的,運行時,可以不貼入下面的代碼*/<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>



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.