跨域返回 JQUERY AJAX請求成功,返回了數據,可是不進SUCCESS的問題 【轉】

JQUERY AJAX請求成功,返回了數據,可是不進SUCCESS的問題 【轉】

Posted on 2016-01-06 20:07 金-Fish 閱讀(11596) 評論(1)  編輯 收藏html

      這幾天一直被 ajax請求成功,返回了數據,可是不進success的問題困擾着,怎麼弄就是解決不了,總覺得 是:$(document).ready(function(){});沒起做用,一直找頁面加載的方法來試,整了好幾天沒整出來....今天比較幸運, 在網上找到了一篇關於這方面問題的文章,按上面的方法一試,果真ok了,哈哈哈,真是過高興了....終於解決這個問題了。ajax

這個問題的緣由(來自http://www.myexception.cn/ajax/413061.html的拷貝內容):數據庫

--------------------------拷貝內容 start ----------------------------------------------------編程

「   1.狀態碼返回200--代表服務器正常響應了客戶端的請求;
      2.經過firebug和IE的httpWatcher能夠看出服務器端返回了正常的數據,而且是符合業務邏輯的數據。
           可是,程序就是不進入到回調函數success: function(data){****}而是進入到error: function(data){***}
    記得上次是由於存在跨域訪問的問題致使。此次查看不存在跨域的問題。此時就非常不解。
          事情的來源是這樣的: 後臺的配置管理模塊中有一塊是關於國際化的配置,增長國際化描述等等,查詢國際化描述。
         問題的來源是在輸入key='a' 查詢前十條數據時發現能夠正常的展示數據,可是當我輸入key值爲z時,而且再查詢前20條數據是發現數據不能展示,可是server返回了數據庫中的數 據。這時第一反應是事不時數據返回的有問題,粗略的檢查了返回的數據發現和第一次查詢沒有什麼明顯的區別。可是隻查詢第十四條數據時發現,顯示不出來。這 時候就開始懷疑了數據問題,進而到數據庫中查找第十四條數據沒有發現什麼特別的地方。
     這時開始懷疑,難道是JS程序有處理數據兼容性有問題,以爲甚是難以想象。整了大約半小時,愈來愈以爲不大可能。就放棄了這種想法。
     有轉向,從新審視數據。 可是發現數據從中間換行了,沒太在乎。 在糾結了一下子後問一同事,指出數據可能多了一個"回車鍵",在其指點下到數據庫表中再次查看該條數據發現有一個字段的值多了一個"回車鍵"。刪除後,一切恢復正常。
     思考第一次和第二次碰到的問題,我初步認識到:
    1. 返回的數據類型必定要符合定義的數據類型。即若是你定義的 dataType 是 json 類型的,那麼返回來的數據必定是 json 才能夠,平且否則就會執行 error 裏的程序塊兒。
   (1) 同時須要特別的注意返回的JSON數據是不是嚴格的JSON格式.
   (2) 也應該嚴重關切當後臺返回的是一個List 數據(List當中的數據是Json格式)時,有沒髒數據即不是嚴格的JSON格式。
    很隱蔽的多是數據某一個字段中在開始或末尾含有特殊字符,以"回車鍵"、"Tab鍵"等
    這類隱蔽錯誤的規避措施就是好的編程習慣:
a. 對於在頁面填寫入庫的數據最好強制性的作,去空操做<利用客戶端最好>。
b. 特殊的業務需注意特殊字符。
   這樣還不夠,由於在開發過程當中測試或開發人員本身在數據庫中手動添加數據,可能會多加了空格等,致使程序調試,測試帶來了麻煩。 這時就須要考慮在後臺代碼對獲取的數據作處理。
      2. 緣由是ajax請求跨域了,解決方法是在兩個文件裏都添加一段 js: [/b]document.domain,或者採用Jsonp的方式,如個人前一篇blog中提到的。
還有一點對JQuery 中Ajax的一點其它的認識: 客戶端發起請求,獲得服務器端的相應是200,<正確拿到服務器響應的數據>沒有問題.此時在判斷進入success 對應的回調函數仍是進入到error對應的回調函數以前,可能會校驗一些東西:
      1. 返回的每條數據是不是dataType中定義的數據類型。若是有部分數據不是或者哪怕一條數據沒有嚴格的按照dataType定義的類型,程序就會進入到error:function(){****}
      2. 請求的域和當前域是不是同一域,若是不是同一域也十分有可能進入error:function(){***}   」 json

 ---------------------------end --------------------------------------------------------------------------跨域

        經過看了這段內容後,我再對照個人ajax 看了一遍,發現我少配了一個屬性(dataType屬性)由於我數據類型返回的是json類型,而我這邊沒有配dataType:'json',這一屬 性,因此致使出現了此問題。不過, 困擾我這麼久的問題終於解決了,下次得萬分當心纔是,該配置的東西仍是得配置,不能偷懶。服務器

相關文章
相關標籤/搜索