Jquery跨域獲得Json時(shí)invalid label錯(cuò)誤的解決辦法
更新時(shí)間:2011年01月11日 23:31:50 作者:
這兩天用 Jquery 跨域取數(shù)據(jù)的時(shí)候,經(jīng)常碰到 invalid label 這個(gè)錯(cuò)誤,十分的郁悶,老是取不到服務(wù)器端發(fā)送回來的 json 值,一般跨域用到的兩個(gè)方法為:$.ajax 和 $.getJson
最后,仔細(xì)安靜下來,細(xì)讀 json 官方文檔后發(fā)現(xiàn)這么一段:
JSON數(shù)據(jù)是一種能很方便通過JavaScript解析的結(jié)構(gòu)化數(shù)據(jù)。如果獲取的數(shù)據(jù)文件存放在遠(yuǎn)程服務(wù)器上(域名不同,也就是跨域獲取數(shù)據(jù)),則需要使用jsonp類型。使用這種類型的話,會(huì)創(chuàng)建一個(gè)查詢字符串參數(shù) callback=? ,這個(gè)參數(shù)會(huì)加在請(qǐng)求的URL后面。服務(wù)器端應(yīng)當(dāng)在JSON數(shù)據(jù)前加上回調(diào)函數(shù)名,以便完成一個(gè)有效的JSONP請(qǐng)求。如果要指定回調(diào)函數(shù)的參數(shù)名來取代默認(rèn)的callback,可以通過設(shè)置$.ajax()的jsonp參數(shù)。
其實(shí)jquery跨域的原理是通過外鏈 <script> 來實(shí)現(xiàn)的,然后在通過回調(diào)函數(shù)加上回調(diào)函數(shù)的參數(shù)來實(shí)現(xiàn)真正的跨域
Jquery 在每次跨域發(fā)送請(qǐng)求時(shí)都會(huì)有callback這個(gè)參數(shù),其實(shí)這個(gè)參數(shù)的值就是回調(diào)函數(shù)名稱,所以,服務(wù)器端在發(fā)送json數(shù)據(jù)時(shí),應(yīng)該把這個(gè)參數(shù)放到前面,這個(gè)參數(shù)的值往往是隨機(jī)生成的,如:jsonp1294734708682,同時(shí)也可以通過 $.ajax 方法設(shè)置 callback 方法的名稱。明白了原理后,服務(wù)器端應(yīng)該這樣發(fā)送數(shù)據(jù):
string message = "jsonp1294734708682({\"userid\":0,\"username\":\"null\"})";
這樣,json 數(shù)據(jù) {\"userid\":0,\"username\":\"null\"} 就作為了 jsonp1294734708682 回調(diào)函數(shù)的一個(gè)參數(shù)
跨域獲得Json時(shí)invalid label的解決辦法:
服務(wù)器端在輸出 Json 數(shù)據(jù)時(shí),前面加上 callback 參數(shù)的值,如:jsonp1294734708682({\"userid\":0,\"username\":\"null\"})
JSON數(shù)據(jù)是一種能很方便通過JavaScript解析的結(jié)構(gòu)化數(shù)據(jù)。如果獲取的數(shù)據(jù)文件存放在遠(yuǎn)程服務(wù)器上(域名不同,也就是跨域獲取數(shù)據(jù)),則需要使用jsonp類型。使用這種類型的話,會(huì)創(chuàng)建一個(gè)查詢字符串參數(shù) callback=? ,這個(gè)參數(shù)會(huì)加在請(qǐng)求的URL后面。服務(wù)器端應(yīng)當(dāng)在JSON數(shù)據(jù)前加上回調(diào)函數(shù)名,以便完成一個(gè)有效的JSONP請(qǐng)求。如果要指定回調(diào)函數(shù)的參數(shù)名來取代默認(rèn)的callback,可以通過設(shè)置$.ajax()的jsonp參數(shù)。
其實(shí)jquery跨域的原理是通過外鏈 <script> 來實(shí)現(xiàn)的,然后在通過回調(diào)函數(shù)加上回調(diào)函數(shù)的參數(shù)來實(shí)現(xiàn)真正的跨域
Jquery 在每次跨域發(fā)送請(qǐng)求時(shí)都會(huì)有callback這個(gè)參數(shù),其實(shí)這個(gè)參數(shù)的值就是回調(diào)函數(shù)名稱,所以,服務(wù)器端在發(fā)送json數(shù)據(jù)時(shí),應(yīng)該把這個(gè)參數(shù)放到前面,這個(gè)參數(shù)的值往往是隨機(jī)生成的,如:jsonp1294734708682,同時(shí)也可以通過 $.ajax 方法設(shè)置 callback 方法的名稱。明白了原理后,服務(wù)器端應(yīng)該這樣發(fā)送數(shù)據(jù):
string message = "jsonp1294734708682({\"userid\":0,\"username\":\"null\"})";
這樣,json 數(shù)據(jù) {\"userid\":0,\"username\":\"null\"} 就作為了 jsonp1294734708682 回調(diào)函數(shù)的一個(gè)參數(shù)
跨域獲得Json時(shí)invalid label的解決辦法:
服務(wù)器端在輸出 Json 數(shù)據(jù)時(shí),前面加上 callback 參數(shù)的值,如:jsonp1294734708682({\"userid\":0,\"username\":\"null\"})
相關(guān)文章
jquery實(shí)現(xiàn)簡(jiǎn)單的瀑布流布局
瀑布流布局有兩種,一種是固定列,一種是非固定列。本文主要記述第一種的實(shí)現(xiàn)。需要的朋友可以參考借鑒2016-12-12
juqery 學(xué)習(xí)之三 選擇器 可見性 元素屬性
juqery 學(xué)習(xí)之三 選擇器 可見性 元素屬性,需要的朋友可以參考下。2010-11-11
jquery lazyload延遲加載技術(shù)的實(shí)現(xiàn)原理分析
懶加載技術(shù)(簡(jiǎn)稱lazyload)并不是新技術(shù),它是js程序員對(duì)網(wǎng)頁性能優(yōu)化的一種方案。lazyload的核心是按需加載。在大型網(wǎng)站中都有l(wèi)azyload的身影,例如谷歌的圖片搜索頁,迅雷首頁,淘寶網(wǎng),QQ空間等。2011-01-01
jQuery 選擇器項(xiàng)目實(shí)例分析及實(shí)現(xiàn)代碼
首先廢話一句,jQuery選擇器真心很強(qiáng)大!接下來詳細(xì)介紹jQuery 選擇器項(xiàng)目實(shí)例實(shí)現(xiàn)方式2012-12-12
基于jquery實(shí)現(xiàn)表格內(nèi)容篩選功能實(shí)例解析
對(duì)于表格來說,當(dāng)數(shù)據(jù)比較多的時(shí)候,我們無法一頁一頁的查找,這樣我們就可以進(jìn)行篩選操作,這篇文章主要為大家詳細(xì)介紹了基于jquery實(shí)現(xiàn)表格內(nèi)容篩選功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
jQuery prototype沖突的2種解決方法(附demo示例下載)
這篇文章主要介紹了jQuery prototype沖突的2種解決方法,分析了針對(duì)jQuery中添加代碼與沖突位置添加代碼2種情況,并附帶demo示例供讀者下載參考,需要的朋友可以參考下2016-01-01
jquery獲取多個(gè)checkbox的值異步提交給php
這篇文章主要介紹了jquery獲取多個(gè)checkbox的值異步提交給php的相關(guān)資料,需要的朋友可以參考下2015-07-07
jQuery簡(jiǎn)單獲取DIV和A標(biāo)簽元素位置的方法
這篇文章主要介紹了jQuery簡(jiǎn)單獲取DIV和A標(biāo)簽元素位置的方法,結(jié)合實(shí)例形式分析了jQuery針對(duì)頁面div及A標(biāo)簽元素相關(guān)操作技巧,需要的朋友可以參考下2017-02-02

