2009-06-08 69 views
9

我無法理解爲什麼我無法從服務器答案中獲得正確的ISO-8859-1 charstet。由於這是一個關於遺留代碼的工作,我幾乎無法更改頁面上的字符集編碼。Jquery:ajax發佈和編碼

我利用的jQuery調用

$.post("server-side-code", {t:ctext, i:ioff, sid:sessionid}, 
    function(data, status) {    
     $('#chk').append(data); 
    }); 

張貼textarea的值創建使用javascript:

<form accept-charset='ISO-8859-1' method='post'> 
<textarea cols='40' rows='8' id='commento'></textarea><br> 
<input type='button' value='invia' id='submit'></form> 

服務器端腳本處理請求宣佈在其頂部:

text/html; charset=ISO-8859-1 

所以,說實話,我不知道我應該申報什麼,在條款的編碼。儘管如此,重音符號「àèéìòù」反彈爲:將服務器答案的HTML元素

源保存爲ASCII時「一節AA©Ã¬Ã²Ã¹」。 Tryng要做到這一點,對要發佈的變量有基本的Html編碼沒有解決:

ctext = escapeHTML(ctext); 

function escapeHTML (str) 
{ 
    var div = document.createElement('div'); 
    var text = document.createTextNode(str); 
    div.appendChild(text); 
    return div.innerHTML; 
}; 

一些想法?

謝謝!

+0

呃......這太瘋狂了。我不相信。問題解決了,聲明UTF-8服務器端頁面返回對ajax請求的答案。我的意思是:聲明一個不同的字符集,形成在製作ajax請求的頁面中使用的正確字符集。 – Daniel 2009-06-08 15:53:31

回答

5

我現在有一個更好的解決方案。發佈並獲得完美的作品。 我正在通過默認處理ISO 8859東西的tomcat工作。

網頁特性:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

頭內部網頁的字符集。

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

現在,我所有的參數都被轉義函數轉義了,我之前提供了這個解決方案。

(function($) {$.fn.escape = function() { 
    return escape(this.val());};})(jQuery); 

現在,發送Ajax請求當我設置的contentType這樣:

contentType : "application/x-www-form-urlencoded; charset=iso-8859-1" 

最後,在servlet或任何接收器接收的參數,當我使用這個解碼參數。

public String getHttpParameter(String name) throws Exception { 
    String value = this.getHttpRequest().getParameter(name); 
    return value == null || value.isEmpty() ? value : URLDecoder.decode(value,"ISO-8859-1"); 
} 

POST和GET在IE 7和8,SAFARI,CHROME和FIREFOX中完美工作。

+0

使用此解決方案我有問題,有人發送caracter'%'。 URLDecoder.decode啓動一個異常(Ilegal參數 - 不完整的尾隨轉義(%)模式)。 – 2012-02-06 11:05:25

0

據我所知,jQuery使用調用AJAX方法解釋接收數據的網頁編碼。您是否使用了正確的頁面編碼?如果是,那麼很可能錯誤在於服務器代碼。嘗試以編程方式(Web瀏覽器外部)調用AJAX處理程序以查看它返回的內容。

+0

我正在使用: Daniel 2009-06-08 15:28:24

1

不知道這是什麼打破你的情況,但accept-charset是極其不受支持,你甚至可以不使用它。這是頁面編碼,它將控制發送回服務器的內容。

如果您查看服務器上保存的文件以查看其中的數據是否正常,它會很有用。這至少會確定交易的客戶端 - >服務器部分是否正常工作。

0

我的所有頁面都是ISO-8859-1,我的回答也是8859,但jquery ajax嚇壞了我。我的解決方案是用這個包裝原始的$ .ajax功能。完美適用於GET請求,我將很快發佈POST請求的解決方案。

召喚:

$.myrequest({ 
    url: "/myapp/myurl", 
    params: { 
    key1: $("#myinput").escape() 
    } 
}); 

源逃生功能

(function($) { 
$.fn.escape = function() { 
    return escape(this.val()); 
};})(jQuery); 

的來源myrequest功能

(function($) { 

$.request = function(settings) { 

    /** 
    * generates a string that will be passed as 
    * data instead an object, but we have the capability 
    * of pass an object but in another variable called param 
    */ 
    function _parseParameters(settings) { 
     var data = ""; 
     for (var param in settings.params) { 
      data += param + "=" + settings.params[param] + "&"; 
     } 
     settings.data = data; 
    } 
    _parseParameters(settings); 
    $.ajax(settings); 
}})(jQuery); 
1

請嘗試在php文件中使用逃生()JavaScript和urldecode()

它會奏效。

2

我已經使用的JavaScript

escape($("#some_id").val()) 

以下和PHP

urldecode($var) 

它爲我以下。

0

也許你忘了在指定它爲UTF-8之前在服務器端聲明contentType,在這種情況下,contentType爲null,服務器不知道它處理的是什麼類型的數據。一旦將contentType聲明爲UTF-8,服務器就能夠理解哪種類型的數據正在處理。將contentType聲明爲UTF-8並不是正確的解決方案,儘管它有幫助。 Rodrigo提供的答案可能是解決您的問題的最佳解決方案。