jsonp有的哥哥們解釋為json padding——json格式的填充,然後妥妥的就誤導了我好久啊
好吧,雖然網上有很多的jsonp的詳細講解,我還是羅嗦一下吧。
我們都知道,根據同源規則是不能訪問其他域內的內容,但是總是會有些例外的,比如說帶src屬性的標籤。那這裡我們就選了乙個script標籤,通過src可以引用其他的js檔案。
其實jsonp的基礎和用jquery是一樣的,jquery的話可以直接引用jquery.com上面的檔案,然後我們就可以用jquery的函式。恩,其實原理呢是一樣的,如果我們在伺服器上有這麼乙個js檔案,裡面有這麼乙個json物件的話,那是不是我們其實就獲得了想要的json物件(ps:注意,這裡只是舉例子,不一定返回的就是json,這要看伺服器上時怎麼實現的,也有可能是xml或者就是乙個可執行函式或者是其他什麼東西,但是如果返回的內容不符合script標籤mime,那是會報錯的)
好的,有了這個基礎,那我們就可以理解初步jsonp是這麼一回事——通過伺服器上的js檔案,執行一段**,這段**將返回我們需要的東西(傳遞引數的時候可以是json的格式,但是這個不是必須)
好了,重點來了,jsonp是怎麼實現的,在這裡我特指的是客戶端上的實現
view code如上面的**所示,首先明確一點的是,我這裡沒有用到json,所以json不是jsonp的必要條件,這個要明確,然後我們再來分析。
url代表的是需要訪問的位址,裡面有**函式xiaosi作為乙個callback的引數傳入訪問的url裡,這代表當我們新增了這段script之後,伺服器就會返回我們需要的東西(別問我怎麼實現,我不懂後台,但是伺服器需要實現的功能就是這個)
addscript這個函式是用來新增script引用的,新增完引用之後,伺服器實現資料的讀出,然後放在這個script裡面,所以我們引用這個script的時候可以直接認為這就是一段我們需要的資料
xiaosi就是在獲得資料之後的**函式,我們需要操作返回的資料的話就需要在這裡面弄
如果你要使用jquery的話,最簡單的使用方法就是
$.getjson(url+"&callback=?",functionview code(data));
如果你的getjson方法的引數url裡有callback=?就會為你自動建立jsonp的**函式,也會自動幫你插入和刪除script,你只需要在要訪問的url後面加上callback=?就可以了,?表示建立的**函式是自動的,不過不用管它
ps:我之前有很多理解上的錯誤,可能是大腦cpu品質太低,跑不起來,所以我把之前弄錯的地方寫下來,以免再犯
1.jsonp返回的資料不一定是json,這個要看伺服器怎麼實現,如果可能的話,返回資料是錯誤也不一定(ps:強調一下,如果是支援jsonp格式的伺服器返回的是乙個函式,呼叫這個函式得到想要的,不支援的話即使返回的是json依舊是會報錯的。)
2.如果是jquery實現的話最好是直接用callback=?就好了,因為這樣省事情而且不容易出錯,自定義返回函式名字的話需要在$.ajax()的模式下才能改
小弟才疏學淺,上面的胡言亂語必有不足之初,還請各位多多直接(尼瑪,乙個不小心就一點多了,明天還要上班,哎)
json與jsonp的區別
json與jsonp的區別 1.json是資料格式,用在同源非同步請求的返回結果。2.jsonp是一種跨域請求方式,其原理就是動態生成script標籤,設定src為遠端位址,內容為乙個js呼叫,比如遠端返回foo 123 那麼瀏覽器收到後就會執行foo函式 jsonpcallbanck json是一...
跨域,json與jsonp格式
好久都沒有寫隨筆了,最近大家都忙著考試要放假了,我也要忙一忙嘍.不過再忙我還是來啦 簡單的說,json是一種輕量級的資料交換格式。平時我們使用ajax等使用的一種資料形式,那麼今天就說說jsonp是個什麼鬼。首先接觸的時候也是一臉懵逼,都不清楚這是什麼東西,上網搜啊查啊,最後才弄明白了。我們平時在寫...
使用jsonp解決ajax請求json跨域問題
網域名稱不同。網域名稱相同,埠不同。只有網域名稱相同,埠相同,js才能請求。jsonp是一種跨域解決方案,js跨域請求資料是不可以的,但是js跨域請求js指令碼是可以的。可以把資料封裝成乙個js語句,做乙個方法的呼叫。跨域請求js指令碼可以得到此指令碼,得到js之後會立即執行。可以把資料作為引數傳遞...