瀏覽器禁止跨域請求json數據解決方法--jsonp


  目前在做一個項目需要有天氣預報模塊,使用的是api獲取數據然后進行解析並顯示。但是在調試的時候發現瀏覽器一直顯示不出東西,控制台一看,提示的是

問題應該是瀏覽器不支持跨域訪問,通過搜索發現解決瀏覽器跨域訪問問題的方法一般是針對chrome的,在快捷方式后面加--allow-file-access-from-files 允許跨域傳輸或者是

--disable-web-security 關閉安全訪問,但是在調試的時候,剛開始成功了,過了幾天后不知道為什么又是不行了,總之就是覺得很不穩定的方法,還有就是考慮到在其他的客戶機上面使用時一般不會去弄這寫東西,這只是開發時才會用的。所以只能另外找辦法了。

  通過查找資料發現解決的另外兩種辦法分別是:

    1.使用.jsp 和 .php進行封裝,在服務端對api進行請求,再返回數據;

    2.通過jsonp技術獲取數據;

  由於個人原因,選擇了第二種,也就是jsonp技術來實現。以下是實現過程:

  請求的api是 http://api.map.baidu.com/telematics/v3/weather?location=廣州&output=json&ak=FK9mkfdQsloEngodbFl4FeY3 返回的數據可以通過output設置為xml或者json。此處設置為json。默認返回json技術,所以我們可以在此處使用jsonp來解析。jsonp+jquery解決方案如下:

$(function() {
                    function getWeather() {
                        $.ajax({
                            type: "get",
                            async: false,
                            url: "http://api.map.baidu.com/telematics/v3/weather?location=廣州&output=json&ak=FK9mkfdQsloEngodbFl4FeY3",
                            dataType: "jsonp",
                            jsonp: "callback",
                            jsonpCallback: "weather",

                            success: function (json) {    //成功回調函數                                                  
                                 alert(json.result[0].weather_data[0].data);   //輸出結果
                            },

                            error: function () {  //失敗回調函數
                                console.log('fail to get weather data!');
                            }
                        });
                    }    

這樣便可以解決跨域請求的問題。jsonp的原理相當於將需要的資源通過script標簽引入,所以不受跨域問題的限制。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM