Jquery:ajax发布和编码

时间:2009-06-08 14:24:14

标签: jquery

我无法理解为什么我无法从服务器答案中获得正确的ISO-8859-1字符。由于这是遗留代码的工作,我几乎无法改变页面上的字符集编码。

我使用JQuery调用

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

发布使用javascript创建的textarea值:

<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。尝试执行此操作以对要发布的变量进行基本的Html编码无法解决:

ctext = escapeHTML(ctext);

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

有些想法?

谢谢!

9 个答案:

答案 0 :(得分:5)

我现在有更好的解决方案。发布和完成工作都很完美。 我正在为tomcat工作,他默认处理ISO 8859的东西。

网页属性:

<!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中完美运行。

答案 1 :(得分:2)

我在javascript中使用了以下内容

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

以及PHP中的以下内容

urldecode($var)

它对我有用。

答案 2 :(得分:1)

不确定这是否会破坏您的情况,但accept-charset支持得非常差,您甚至可能都不会使用它。它是页面编码,可以控制发送回服务器的内容。

如果查看服务器上保存的文件以查看其中的数据是否良好,这将非常有用。这至少可以确定交易的客户 - >服务器部分是否有效。

答案 3 :(得分:1)

请尝试在javascript中使用escape(),在php文件中使用urldecode()

它会起作用。

答案 4 :(得分:0)

据我所知,jQuery使用调用AJAX方法的网页编码来解释收到的数据。您是否正在使用页面的正确编码?如果是,那么很可能错误在于服务器代码。尝试以编程方式(在Web浏览器之外)调用AJAX处理程序以查看它返回的内容。

答案 5 :(得分:0)

一般资料: http://www.w3.org/International/O-HTTP-charset

尝试使用php中的utf8_decode()将utf-8字符串与转换和传出数据进行转换。

答案 6 :(得分: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);

答案 7 :(得分:0)

我正在寻找类似问题的高低(使用AJAX的Windows-1250请求)。我找到了一个解决方案并发布在这里: How can be request variables encoded by encodeURIComponent with ISO-8859-1 charset and not utf-8?

答案 8 :(得分:0)

也许您忘记在服务器端声明contentType,然后将其指定为UTF-8,在这种情况下,contentType为null,服务器不知道它处理的是哪种数据。将contentType声明为UTF-8后,服务器就能够了解正在使用哪种数据。将contentType声明为UTF-8并不是正确的解决方案,尽管它有所帮助。 Rodrigo提供的答案可能是解决您问题的最佳方案。