問題一.當我們使用ajax跨域請求數據時,往往設置返回數據類型爲jsonp格式,而由於服務器端返回的json數據格式不對,就會導致客戶端提示‘json數據格式錯誤’。但我們看返回的json數據確實是標準的json格式,例如:{"name":jj,"address":"武漢"},這沒毛病!
目前有兩種解決方法。
1. 最初不是想跨域獲取數據嘛,那在服務器響應的時候咱們給客戶端獲取資源的權限就行了。如下:
getResponse().setHeader("Access-Control-Allow-Origin", "*");此時客戶端ajax請求數據就可以設爲json格式了。
2. 如果我們有耐心仔細查看jQuery文檔的話,會發現這樣幾句話:'如果獲取的數據文件存放在遠程服務器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類型。使用這種類型的話,會創建一個查詢字符串參數 callback=? ,這個參數會加在請求的URL後面。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback,可以通過設置$.ajax()的jsonp參數'。就是說咱們想跨域獲取數據的話可以使用jsonp類型,但服務器端返回的jason數據必須包含回調函數名,供客戶端調用!具體如下:
之前返回的json數據:{"name":jj,"address":"武漢"}
更改後的json數據:jsonpCallback({"name":jj,"address":"武漢"})
客戶端更改:
問題2.ajax請求成功後,頁面居然自動刷新了!!!
這個不知道是不是jQuery的bug,或者是我沒注意jQuery ajax的使用規範?經反覆排查,最終發現使用原生的button標籤,ajax請求成功後頁面會自動刷新,而使用input標籤封裝的button就不會刷新頁面。暫時記之。