首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在Internet 9中出现jQuery.ajax()字符集错误

仅在Internet 9中出现jQuery.ajax()字符集错误
EN

Stack Overflow用户
提问于 2012-04-03 17:35:52
回答 1查看 3.2K关注 0票数 1

更新:谢谢Rob指出代码没有任何问题。在后端发现了一个错误,其中在传递头()时还没有定义字符集。IE对此很敏感,而Chrome和FF则不敏感。

这种情况可以用于支持动态字符集支持的平台上的AJAX调用。

-----------------

原始文章

我以为jQuery为我们解决了浏览器之间的差异。我完全不知道为什么这是完美的工作在Chrome和FF,但没有IE。

Chrome和FF中的

脚本发布了一个iso-8859-1编码的ajax请求。结果是iso-8859-1编码,并返回很好。

In IE9

在后端,根据(get_address.json.php)的标题,我得到了不同的结果:

代码语言:javascript
复制
// 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');

脚本:

代码语言:javascript
复制
<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外文字符):

代码语言:javascript
复制
<?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中的错误警报()说:

代码语言:javascript
复制
[object Error]
error
[object Error]

我不喜欢像转换字符集这样的解决方案,除非这是唯一可能的解决方案。后端是osCommerce,完全是iso-8859-1.

如何防止在不进行字符转换的情况下抛出iso-8859-1内容的错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-03 20:16:17

确保被调用的脚本返回有效的内容类型字符集。

代码语言:javascript
复制
<?php
// make sure CHARSET is defined before output.
header('Content-type: application/json; charset='. CHARSET);
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9998451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档