2011-01-19 68 views
1


請幫忙解釋爲什麼我通過jquery調用ajax正在破壞我的數據?我已經設定我的MySQL數據庫使用utf8_general_ciJquery Ajax Call正在破壞我的數據

  1. 我已經嘗試過通過phpMyAdmin的項目添加到我的MySQL數據庫和中國漢字是完整的,沒有任何變化。
  2. 我也嘗試創建一個簡單的PHP頁面插入相同的一組中文字符,運行php頁面,並檢查輸出在phpmyadmin ..再次沒有變化爲同一組
  3. 這次插入相同的中文集字符通過jquery $ .ajax,但首先不發送到MySQL,但打印到HTML ..相同的設置,並沒有做任何更改...
  4. 使用2頁的php頁使用ajax和INSERT現在數據庫...一些字符現在丟失並且已經改變爲'???'..

任何想法發生了什麼?我也嘗試呼應我的$查詢,它提示我的性格已經失蹤之前,爲了解決這個問題實際上是發送到數據庫

感謝

回答

4

,嘗試設置ocntenttype在Ajax請求:

... 
    jQuery.ajax({ 
     type: "POST", 
     url: "../ajax/setting", 
     cache: false, 
     dataType: "json", 
     data: "user.id=current&update=true&user.setting=" + key + "&user.settingValue=" + escape(value), 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
     beforeSend: function(x) { 
      if((x) && (x.overrideMimeType)) 
       x.overrideMimeType("application/j-son; charset=UTF-8"); 
     }, 
... 

beforeSend技巧也可能有助於你的情況。我發現,根據你發送數據的方式,它可能被編碼得非常不同。如果您想提交帶有字符集的長數據,請確保先編碼它:

即。 submitdata是一個json字符串:

submitType = "POST"; 
submitdata = "data=" + encodeURIComponent(submitdata); 
jQuery.ajax({ 
    type: submitType, 
    url: url, 
    cache: false, 
    data: submitdata, 
    dataType: "json", 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
    beforeSend: function(x) { 
     if((x) && (x.overrideMimeType)) 
      x.overrideMimeType("application/j-son; charset=UTF-8"); 
     return true; 
    }, 

在服務器上我將請求參數「data」並將其轉換爲對象。

希望這有助於

+1

感謝尼克,你貼在我的當前設置沒有工作的答案,但它向我指出什麼導致損壞的數據...因爲我發送我的數據到另一個頁面我.serialize使用(),當我發送之前檢查數據,我發現它已經改變了...所以我想如果我使用decodeURIComponent()之前發送我可能有正確的數據...它的作品。謝謝! – Aries 2011-01-20 03:48:54