Jquery:ajax发布和编码

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

我使用JQuery调用

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

发布使用javascript创建的textarea值:

 

处理请求的服务器端脚本在其顶部声明:

 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; }; 

有些想法?

谢谢!

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

网页属性:

  

头部内部网页的字符集。

  

现在,我的所有参数都使用转义函数进行转义,之前我提供了此解决方案。

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

我在javascript中使用了以下内容

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

以及PHP中的以下内容

 urldecode($var) 

它对我有用。

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

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

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

它会工作。

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

一般信息: http : //www.w3.org/International/O-HTTP-charset

尝试使用php中的utf8_decode()转换utf-8字符串,包含输入和传出数据。

我的所有页面都是ISO-8859-1,我的回复也是8859,但是jquery ajax吓坏了我。 我的解决方案是使用此包装原始的$ .ajaxfunction。 完美地用于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); 

我正在寻找类似问题的高低(使用AJAX的Windows-1250请求)。 我找到了一个解决方案并发布在这里: 如何通过encodeURIComponent使用ISO-8859-1 charset而不是utf-8编码请求变量?

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