AJAX(七)jsonp實戰 天氣預報

2022-04-12 05:22:25 字數 3366 閱讀 9845

本次要做的案例的是使用jsonp製作乙個查詢天氣情況的網頁,我會從如何抓取資料介面,到一步一步完成這個案例來詳細講解。

當然我們不可能自己建氣象站,我們只有通過網際網路拿到別人「分享」給我們的資料介面,然後通過這個資料介面獲取全國的氣象資料。這樣我們就必須使用jsonp了,因為提供氣象資料服務的api,其所在的網域名稱肯定跟我們自己的應用程式不是乙個網域名稱。

那麼問題來了,我們如何知道**有api提供氣象資料服務的?這個就要多觀察多積累了。比如現在很多人的電腦上都會安裝360,一般360防毒在安裝時候會篡改你的瀏覽器主頁為「hao360」這個**,那麼你開啟網頁,每次都會看到這樣的畫面。

這個**在非常顯眼的地方提供了乙個檢視天氣的模組。難道360還開著氣象站?如果不是,那我們只要看看它是如何搞到資料的,我們就能如法炮製了。

一般你可以這樣做:

1.在氣象模組上點滑鼠右鍵->審查元素。去看看他的結構

2.開啟開發者選項工具視窗,點選network(網路)選項卡,然後去檢視請求報文,這樣就能找到氣象資料從哪兒來了。

不過,如果你沒有經驗,你會被請求報文列表中的資料給嚇住,因為實在是太多了,至少不下300條請求項。那我們怎麼去找真正需要的那個請求呢?

試想,這個hao360也不可能自己弄個氣象站,所以它必然也是抓取的第三方api,所以也必然是通過jsonp的形式來實現的。那麼我們只需要在所有的請求報文中按type這一列排下序,然後就只管看請求型別是script的那些項。這樣一下就把範圍縮小了很多很多。

簡單說明下這個url的引數

2._jsonp:你自己定義的**函式的名字。

3.其他的引數都無關緊要,至少對本案例來說是這樣。

當然,我只擷取了一小部分。不過已經可以看出了,這是乙個典型的jsonp跨域訪問。

然後,我把資料copy出來,貼到sublime中,格式化之後,資料是這個樣子的。

1

17},

24},

31},

38},

45}],

46。。。。。。

47 }

簡單解釋下資料:

1.這裡只擷取了資料的一部分,只保留了我們案例中需要用到的那一小部分,感興趣的自己去研究吧。

2.顯然,這個資料是js中的,json格式資料。

3.本案例中用到的氣象資料,是在這個json物件的「weather」屬性中。這個屬性的值是乙個js陣列,陣列一共有5個元素,每個元素又是乙個json物件,每個json物件都代表了一天的天氣情況。

先看下頁面的html結構  

>天氣預報-hao360介面

title

>

<

link

rel="stylesheet"

href

="css/weather.css"

>

head

>

<

body

>

<

div

class

="wt_container"

>

<

div

class

="city"

>

<

select

id="selcity"

>

<

option

value

="101180201"

>大安陽

option

>

<

option

value

="101010100"

>北京

option

>

<

option

value

="101180101"

>鄭州

option

>

<

option

value

="101250101"

>長沙

option

>

<

option

value

="101050101"

>哈爾濱

option

>

<

option

value

="101130101"

>烏魯木齊

option

>

<

option

value

="101280101"

>廣州

option

>

select

>

<

button

id="btn"

>檢視天氣

button

>

div>

<

div

class

="weather"

>

<

ul id

="wtinfo"

>

ul>

div>

div>

body

>

html

>

2.由於我們拿到的資料是5天的資料,所以我們用乙個標籤來展示所有的查詢到的5天的天氣,每天的天氣用乙個li包住。html中注釋掉的部分就是模擬資料。

我們在js部分,只需要通過jsonp請求道資料,然後按照模擬資料的格式,填充到ul裡就行了。

直接看**

12
**解釋:

1.這用到了jquery,所以第1行**先引入了jquery包

2.jsonp的原理是通過

jsonp形式的ajax請求

sonp形式的ajax請求 並且通過get請求的方式傳入引數,注意 跨域請求是只能是get請求不能使用post請求 jsonp 傳遞給請求處理程式或頁面的,用以獲得jsonp 函式名的引數名 預設為 callback jsonpcallback 自定義的jsonp 函式名稱,預設為jquery自動生...

ajax工作原理,Jsonp原理

ajax工作原理是 相當於在使用者和伺服器之間加了 個中間層 ajax引擎 使使用者操作與伺服器響應非同步化。對於使用者請求ajax引擎會做一些資料驗證和資料處理,不是所有請求都提交給伺服器,當需要從伺服器讀取新資料時由ajax引擎代為向伺服器提交請求。ajax最大優點就是不重新整理整個頁面的前提下...

jsonp解決ajax跨域問題

利用jsonp解決ajax跨域問題 至於success裡面的操作可以忽略 某工程下ajax請求 var isvisible true function getlog var startpage data.startpage var endpage data.endpage 拼接 導航 按鈕 和 資料...