我用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个字符的字符串
我使用了JavaScriptString对象的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/
我用西班牙语做了很多开发,我注意到了一些可能对你有帮助的事情,因为我已经经历过了:
头函数中的字符集应该是UTF-8。
此外,FILE本身(PHP脚本)必须以UTF-8保存,如果使用Notepad++编辑文件并选择不带BOM的UTF-8编码,则可以轻松实现这一点。
javascript和HTML文件也是如此,它们都应该使用UTF-8编码,而不是使用BOM,而不是ANSI。
让我知道!
试着在调用中像这样设置Contenttype,据我所知,如果没有指定jQueryAjax,那么它总是utf-8。
$.ajax({
...
datatype: "text",
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1",
error: connexionAjaxError,
success: connexionAjaxSuccess,
type: "POST",
...
});
编辑:如果我的答案没有帮助,如果你检查服务器的字符集配置,并发布它,可能会有所帮助。