jQuery ajax請求相關與跨域問題

問題一.當我們使用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就不會刷新頁面。暫時記之。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章