1
更新:謝謝羅布W代表指出有什麼不對的代碼。在傳遞標頭()時尚未定義CHARSET的情況下,發現後端存在錯誤。 IE瀏覽器對此很敏感,而Chrome和FF則不是。jQuery.ajax()字符集的錯誤9
這種情況下可用於具有動態字符集支持的平臺上的AJAX調用。
-----------------
[原帖]
我認爲jQuery的整理出適合我們的瀏覽器的差異。我完全不知道爲什麼這個工程在Chrome和FF中完美無瑕,但不是IE。
在鉻和FF:
腳本帖一個ISO-8859-1完全編碼AJAX請求。結果是iso-8859-1編碼並很好地返回。
在IE9
在後端,這取決於(get_address.json.php)的頭,我得到不同的結果:
// Throws readyState 0 error in IE.
header('Content-type: application/json; charset=iso-8859-1');
// Works in IE9 but strips foreign characters.
header('Content-type: application/json; charset=utf-8');
// Same result as utf-8 above
header('Content-type: application/json');
腳本:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("input:button[name=get_address]").click(function() {
$.ajax({
url: "get_address.json.php",
type: "POST",
data: $("input:text[name=crn]").serialize(),
cache: false,
async: false,
dataType: "json",
beforeSend: function(xhr) {
xhr.overrideMimeType("application/x-www-form-urlencoded; charset=<?php echo CHARSET; ?>");
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.readyState + '\n' + textStatus + '\n' + errorThrown.message);
},
success: function(data) {
if (!data) {
alert("Error: No response");
return;
}
if (data.error) {
alert(data.error);
return;
}
$("input:text[name=firstname]").val(data.firstname);
$("input:text[name=lastname]").val(data.lastname);
$("input:text[name=street_address]").val(data.street);
$("input:text[name=postcode]").val(data.postcode);
$("input:text[name=city]").val(data.city);
},
complete: function() {}
});
});
});
</script>
<input type="text" name="crn"> <input type="button" name="get_address" value="Get Address" />
模擬JSON響應(使用ISO-8859-1外來字符):
<?php
header('Content-type: application/json; charset='. CHARSET);
echo '{"census":"1","protected":"0","crn":"19000000-1234","firstname":"Åke","lastname":"Jönsson","co":"","street":"Testvägen 1","postcode":"72344","city":"Göteborg"}';
?>
錯誤警報()在IE中說:
[object Error]
error
[object Error]
我不喜歡的字符集轉換,除非這是唯一可行的解決方案花哨的解決方案。後端是osCommerce,純粹是iso-8859-1。
我們如何防止在沒有字符轉換的情況下爲iso-8859-1內容拋出錯誤?
您是否嘗試過轉換字符集? – jrummell 2012-04-03 17:46:50
像IE6,7和8中的魅力一樣工作:http://jsfiddle.net/4cPes/。你能顯示生成的HTML代碼嗎?此外,而不是提醒'errorThrown',使用'errorThrown.message'。這將顯示更有用的錯誤信息... – 2012-04-03 19:29:16
Rob W,感謝您的確認。這導致我在後端最易怒的簡單錯誤。請參閱後續文章。 – tim 2012-04-03 20:18:08