programing

Internet Explorer 8에서 정의되지 않은 JSON 개체

nasanasas 2020. 11. 1. 18:12
반응형

Internet Explorer 8에서 정의되지 않은 JSON 개체


현재 JavaScript 파일을 작성 중이며 다음 줄이 있습니다.

var res = "JSON=" + JSON.stringify(result);

결과는이 선 바로 위에 설정됩니다. 내가 가진 문제는 IE8 (IE8 전용, 즉)이 JSON이 어떻게 든 정의되지 않았다고보고한다는 것입니다. 내가 이해했듯이 IE8은 JSON 지원을 구현 한 브라우저이기 때문에 무엇을 만들어야할지 모르겠습니다. 무슨 일이 벌어 질지 모르는 사람이 있습니까?


선호하는 방법 인 표준 문서 유형을 사용하여 실제로 IE 8 모드에 있는지 확인하십시오.

<!DOCTYPE html>

... 또는 원하지 않는 방법, X-UA-Compatible메타 태그 / 헤더 ...

<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />

자세한 내용은 문서 호환성 정의 를 참조하십시오.


이미 JQuery를 사용중인 경우 jQuery.parseJSON을 사용 하여이 문제를 해결했습니다.


doctype이 없거나 잘못된 doctype이 없거나 html 구문에 오류가 발생하면 IE가 예상과 다른 문서 모드를 사용하게됩니다.

테스트 문서에서 간단한 ""를 사용하고 HEAD 태그의 자식으로 TITLE 태그가없는 경우 window.JSON이 정의되지 않습니다.

브라우저 버전에 대해 리소스를 테스트하는 것이 더 낫다는 것을 항상 기억하십시오. 그리고 사용자가 문서 모드의 에뮬레이션과 함께 IE를 사용할 수 있다면 네이티브가 정의되지 않은 경우 JSON.parse 및 JSON.stringify를 제공하는 코드가있는 것이 좋습니다.


function parseJson(jsonString) {
    if ($.browser.msie && $.browser.version < 8) {
        return eval('(' + jsonString + ')');
    }
    else {
        return JSON.parse(jsonString);
    }
}

에도 불구하고 발생할 수 있습니다 <!DOCTYPE html>페이지 인코딩 인 경우 UTF-8BOM(바이트 순서 표시). 로 파일 저장 시도 UTF-8하지 않고를 BOM적당한 텍스트 편집기를 사용하여.


js 파일에 다음 코드를 넣으십시오.

var JSON = JSON || {};

// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {

var t = typeof (obj);
if (t != "object" || obj === null) {

    // simple data type
    if (t == "string") obj = '"'+obj+'"';
    return String(obj);

}
else {

    // recurse array or object
    var n, v, json = [], arr = (obj && obj.constructor == Array);

    for (n in obj) {
        v = obj[n]; t = typeof(v);

        if (t == "string") v = '"'+v+'"';
        else if (t == "object" && v !== null) v = JSON.stringify(v);

        json.push((arr ? "" : '"' + n + '":') + String(v));
    }

    return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};

// implement JSON.parse de-serialization
JSON.parse = JSON.parse || function (str) {
if (str === "") str = '""';
eval("var p=" + str + ";");
return p;
 };

Check jQuery version. jQuery 2.0 drops support for IE 6, 7 and 8. Use jQuery 1.x instead, which is still officially supported. you can use this Code.

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

read more about jquery migrate.

if not working check this article.


In my case the undefined error was because I was missing a JSON library.

You can add JSON object like this (replace the relative path with your own path):

<script>
        if (typeof window.JSON == 'undefined') {
          document.write('<script src="../scripts/json2.js"><\/script>'); 
        }
</script>

For json2 library: http://cdnjs.com/libraries/json2/

There is also a json3 library: http://cdnjs.com/libraries/json3/

Then you can refer to it in your code:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array));

참고URL : https://stackoverflow.com/questions/4715373/json-object-undefined-in-internet-explorer-8

반응형