最後,仔細安靜下來,細讀 json 官方文檔後發現這麼一段:
JSON數據是一種能很方便通過JavaScript解析的結構化數據。如果獲取的數據文件存放在遠程服務器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類型。使用這種類型的話,會創建一個查詢字符串參數 callback=? ,這個參數會加在請求的URL後面。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback,可以通過設置$.ajax()的jsonp參數。
其實jquery跨域的原理是通過外鏈 <script> 來實現的,然後在通過回調函數加上回調函數的參數來實現真正的跨域
Jquery 在每次跨域發送請求時都會有callback這個參數,其實這個參數的值就是回調函數名稱,所以,服務器端在發送json數據時,應該把這個參數放到前面,這個參數的值往往是隨機生成的,如:jsonp1294734708682,同時也可以通過 $.ajax 方法設置 callback 方法的名稱。明白了原理後,服務器端應該這樣發送數據:
string message = "jsonp1294734708682({\"userid\":0,\"username\":\"null\"})";
這樣,json 數據 {\"userid\":0,\"username\":\"null\"} 就作為了 jsonp1294734708682 回調函數的一個參數
跨域獲得Json時invalid label的解決辦法:
服務器端在輸出 Json 數據時,前面加上 callback 參數的值,如:jsonp1294734708682({\"userid\":0,\"username\":\"null\"})