目前在做一個項目需要有天氣預報模塊,使用的是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標簽引入,所以不受跨域問題的限制。