2012-04-03 2 views
1

업데이트 : Rob W가 코드에 아무런 문제가 없음을 알려 주셔서 감사합니다. 헤더()를 전달할 때 CHARSET이 아직 정의되지 않은 백엔드에서 오류가 발견되었습니다. 크롬과 FF는 그렇지 않지만 IE는 이것에 민감합니다.Internet Explorer 9에서만 jQuery.ajax() charset 오류가 발생했습니다.

이 경우 동적 문자 집합을 지원하는 플랫폼에서 AJAX 호출에 사용할 수 있습니다.

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

[원래 포스트] 내가 jQuery를 우리에게 브라우저의 차이점을 정리 생각

. Chrome과 FF에서는 완벽하게 작동하지만 IE에서는 완벽하게 작동하지 않는 이유는 전혀 없습니다.

크롬과 FF에서

:

스크립트 게시물 완벽하게 아약스 요청을 인코딩이 ISO-8859-1. 그 결과 iso-8859-1이 인코딩되고 멋지게 반환됩니다.

// 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" /> 

백엔드에서 IE9에서

은 (get_address.json.php)의 헤더에 따라, 나는 다른 결과를 얻을 수

시뮬레이트 된 JSON 응답 (ISO-8859-1 외국어 문자 사용) :

01 IE에서 23,516,
<?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"}'; 
?> 

오류 경고()는 말한다 :

[object Error] 
error 
[object Error] 

나는이 가능한 유일한 솔루션입니다하지 않는 캐릭터 세트를 변환 같은 멋진 솔루션을하지 않습니다. 백엔드는 osCommerce이며 순수 iso-8859-1입니다.

문자 변환없이 iso-8859-1 콘텐츠에 오류가 발생하는 것을 어떻게 방지 할 수 있습니까?

+0

변환 된 문자셋을 사용해 보셨습니까? – jrummell

+1

IE6, 7 및 8의 매력처럼 작동합니다. http://jsfiddle.net/4cPes/. 생성 된 HTML 코드를 표시 할 수 있습니까? 또한,'errorThrown'을 경고하는 대신'errorThrown.message'를 사용하십시오. 이렇게하면보다 유용한 오류 메시지가 표시됩니다. –

+0

Rob W, 확인해 주셔서 감사합니다. 이로 인해 백엔드에서 가장 짜증나는 단순한 오류가 발생합니다. 팔로우 게시물을 참조하십시오. – tim

답변

0

호출 된 스크립트가 유효한 content-type charset을 반환하는지 확인하십시오.

<?php 
// make sure CHARSET is defined before output. 
header('Content-type: application/json; charset='. CHARSET); 
?>