我在JavaScript中使用jQuery库对PHP脚本执行AJAX请求 这是执行AJAX请求的命令:
$.ajax({
async: "false",
cache: "false",
data: {login: strLogin, password: strPassword},
datatype: "text",
error: connexionAjaxError,
success: connexionAjaxSuccess,
type: "POST",
url: "./Connexion"
});
“。Connexion”是我的PHP脚本的URL重定向 connexionAjaxError是一个收到HTTP响应后不可避免地执行的JavaScript函数 原因是:我的PHP脚本导致文本/普通页面的HTTP状态代码等于500 这是我的PHP脚本中最相关的部分:
header("HTTP/1.0 500 Internal Server Error;
Content-type: text/plain;
charset=ISO-8859-1");
echo "été";
这是connexionAjaxError回调函数的签名:
function connexionAjaxError(jqXHR, textStatus, errorThrown)
我的PHP结果为字符串“été” 我的PHP内部编码是ISO-8859-1,因此结果字符串以十六进制表示法编码[e9 74 e9]。
但是connexionAjaxError回调函数中的jqXHR.responseText包含一个1个字符的字符串。
我使用了JavaScript String对象的charCodeAt方法来获取字符的unicode(UTF-8?)代码。
该字符以十六进制表示法编码为65535,等效于十六进制表示法中的[ff ff]。
我不明白为什么jqXHR.responseText不包含3个字符的字符串“été”。
我不是JavaScript方面的专家,但我认为jqXHR.responseText只能包含以UTF-8编码的字符串。
因此,jqXHR.responseText中的字符串“été”将以十六进制表示法编码[c3a9 74 c3a9]。
我从以下网站检索了字符“é”的UTF-8代码:http://www.utf8-chartable.de/
答案 0 :(得分:1)
我用西班牙语进行了很多开发,我注意到了一些可能对你有帮助的事情,因为我已经经历过这个:
标题函数中的字符集应为UTF-8。
此外,FILE本身(PHP脚本)必须以UTF-8保存,如果使用Notepad ++编辑文件并选择编码为UTF-8而不使用BOM,则可以轻松实现此目的。
同样适用于您的javascript和HTML文件,它们都应使用UTF-8进行编码,而不使用BOM而不是ANSI。
让我知道!
答案 1 :(得分:0)
尝试在你的调用中设置这样的Contenttype,据我所知,如果没有指定,jQuery Ajax总是utf-8。
$.ajax({
...
datatype: "text",
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
error: connexionAjaxError,
success: connexionAjaxSuccess,
type: "POST",
...
});
编辑: 如果我的回答没有帮助,那么如果您检查服务器字符集配置并发布它可能会有所帮助。