Chrome : Uncaught SyntaxError : 예기치 않은 입력 끝


176

Chrome에서 내 페이지를로드 할 때 콘솔에 모호한 오류가 발생합니다.

잡히지 않은 구문 오류 : 예기치 않은 입력 끝

무엇이 원인인지 전혀 모르겠습니다. 이 오류를 디버깅하려면 어떻게해야합니까?


2
네트워크 스니퍼에서 응답을 확인하면 실마리가 생길 수 있습니다. 내 생각은 있다는 것입니다 Content-length더 헤더 지정 응답 포함, 아니면 서버가 어떻게 든 잘못된 HTML을 보내는 것보다 바이트.
— tdammers

2
} 대부분 누락되었습니다 (자바 스크립트). 클래스와 함수의 끝을 확인하십시오. 스크립트 끝에}를 다시 추가하고 코드를 자동으로 다시 포맷하십시오. 코드에 이상한 들여 쓰기가 있으면 그 바로 앞에 어딘가}가 빠진 지점 일 가능성이 큽니다.
— OG Sean

JS를 잘못로드 할 때이 문제가 발생했습니다. 나는 그것을로드 <script>https://example.com/a.js</script>했고 그것이 있어야합니다<script src="https://example.com/a.js"></script>
— Daniel Apt

오늘 Google 스프레드 시트에서이 오류가 발생합니다. 내 생각에 JS 파일 중 하나가 너무 커서 완전히로드하지 않고 종료 될 수 있습니다. 또는 앱 서버 중 하나에 버그가 있으며 JS 파일이 완전히 다운로드되기 전에 http 연결을 닫고 있습니다.
— 테디

답변:


227

이 특별한 오류는 . 대부분의 경우 JavaScript는 어떤 식 으로든 손상되었습니다. 예를 들어 a }또는 이와 유사한 것이 누락되었습니다 .

예를 들어, 이것은 "예기치 않은 입력 끝"을 생성합니다.

eval('[{"test": 4}') // notice the missing ]

그러나 문제의 근본 원인은 요청 JSON URL이 있습니다 것 같다 콘텐츠 형식 의 text/html크롬은 분명히 사실 때문에 입력의 예상치 못한 말에 다음 결과가 포함 된 이미지 태그가되고 있음을 HTML로 구문 분석을 시도하는을 파싱되었습니다.

Content-Type 을 설정하여 text/plain문제를 해결해야한다고 생각하십시오.

그럼에도 불구하고 V8은 입력이 예기치 않게 종료 된 위치를 정확하게 알려주는 더 나은 작업을 수행 할 수 있습니다.


2
확인 감사합니다. 많은 json 요청을 모두 제거했지만 오류가 사라졌습니다. 내 json 요청에 정확히 무엇이 잘못되었는지 아직 알지 못했습니다. 방금 디버깅을 시작할 위치를 몰랐습니다. 내가 근본 원인을 어떻게 결정했는지 물어볼 수 있다면
— dlaurent86

2
그렇게 분명하지 않을 수 있습니다. 최소화 된 JS가 엉망이되어 축소 된 JS 에서이 오류가 발생했지만 축소되지 않은 JS는 완벽하게 합법적이고 유효했습니다. 불행히도 Chrome은 오류가 발생한 줄만 표시합니다. JS를 최소화하는 경우 일반적으로 전체 파일입니다.
— Cerin

입력이 끝난 곳은 그리 많지 않습니다 (마지막에있는 cuz). 오히려 아는 어떤 톤 도움이 될 것으로 예상했다.
— AndrewS

내 꼬리를 구했다. 나는 애매 모호함으로 몹시 화가났다. 감사.
— Cyprus106

4
JSON.parse (text)를 사용하고 텍스트 값이 비어있는 문자열이기 때문에 동일한 오류가 발생했습니다.
— Khudairy

73

Mozilla 용 Firebug를 사용해보십시오 }. 누락 된 위치가 표시됩니다 .

http://getfirebug.com/


12
Firebug가 필요하지 않았습니다. Firefox의 콘솔은 정확히 어떤 줄과 어떤 문자가 빠졌는지 나에게 알려줍니다
— Dylan Valade

1
firefug도 필요하지 않았습니다. 파이어 폭스 콘솔 ctrl+shift+i이 알려줄 것입니다.
— Benjamin Crouzier

1
경고, 스크립트가 한 줄로 최소화되면 Firefox가 몇 분 / 시간 / 년 동안 중단 될 것으로 예상합니다.
— Cerin

1
이것이 구문 오류를 추적하는 가장 쉬운 방법입니다.
— BentOnCoding

신 이시여 감사합니다 개발자 툴링 측면에서 크롬이 파이어 폭스에 비해 훨씬 앞서 있다고 생각합니다. 이 작은 것을 제대로 얻지 못하는 방법에 놀랍습니다. 큰 두통에서 나를 구했다!
— 이사야

33

다른 비슷한 질문에 대한 내 사례 를 보십시오 .

필자의 경우 빈 JSON을 구문 분석하려고했습니다.

JSON.parse(stringifiedJSON);

즉, 다음과 같은 상황이 발생했습니다.

JSON.parse("");

2
예, 이것도 가지고있었습니다! 빈 문자열 대신 "{}"을 제공하면 쉽게 해결할 수 있습니다.
— cronoklee

1
URL에 이중 슬래시 (예 : localhost : 8080 // mypath / blagh)로 인해 빈 json이 수신되고 서버가 이에 대한 빈 응답을 반환했습니다.
— jpierson

1
이 솔루션을 확인하기 위해 여기에 왔습니다.
— Luís Assunção

10

}JavaScript 코드에서 닫는 중괄호 문자 ( )를 생략하면이 오류가 발생 합니다. 버팀대가 올바르게 균형을 이루는 지 확인하십시오.


10

기록을 위해이 오류의 다양한 원인을 찾으려고하는 사람. 빈 HTML5 데이터 속성

data-mydata = ''

오류도 발생합니다. 데이터 값이 널 문자열인지 확인하고 속성을 전혀 포함하지 않아야합니다. 이것은 스크립트 생성 HTML과 크게 관련이 있습니다.


당신 없이는 이것을 이해하지 못했을 것입니다. VideoJS를 사용하고 있었고 비디오 플레이어 용 HTML을 페이지에서 복사했습니다. 사용할 수있는 데이터 속성 자리 표시자가 있었지만 그렇지 않았습니다. 비디오가로드되지 않아서 모든 사람들이 말하는 오류가 발생했습니다. 삭제 후 data-setup='{"example_option":true}' 모든 것이 훌륭하게 작동했습니다.
— Tyler Buchea

1
@ user1002379, 기꺼이 도와 드리겠습니다.
— DroidOS

8

나를위한 문제 dataType: "json"는 HTTP 201 (작성)을 반환하고 요청 본문이없는 POST 요청에 대해 $ .ajax를 수행하고 있다는 것 입니다. 수정은 단순히 해당 키 / 값을 제거하는 것이 었습니다.


아약스 요청 (업로드)을 시작하고 완료되기 전에 중단 했으며이 오류가 발생했습니다.
— Dustin Poissant


6

이 오류의 또 다른 원인 : API가 응답 본문없이 의도적으로 응답하지만 200 OK상태 코드 대신 상태 코드로 응답하는 경우 204 No Content입니다. 일부 JavaScript 라이브러리는 컨텐츠가 없을 때 예기치 않은 컨텐츠 유형에 제대로 응답하지 않을 수 있으므로 올바른 상태 코드를 사용하십시오!


3

분명히 오류가 발생한 열린 브래킷이있을 것입니다.

Firefox에서 페이지를 연 다음 Firebug를 열고 콘솔을 확인하는 것이 좋습니다. 누락 된 기호가 표시됩니다.

스크린 샷 예 :

오류를 강조하는 Firebug


2

내 문제는 Chrome 캐시와 관련이 있습니다. Firefox에서 웹 응용 프로그램을 실행하여 이것을 테스트했지만 오류가 발생하지 않았습니다. 그래서 나는 Chrome의 캐시 비우기를 시도하기로 결정했습니다.


1

JavaScript 코드가 한 줄로 축소 된 경우이 오류의 또 다른 원인 //은/**/ 주석 .

나쁨 ( 함수 //종료 }를 포함하여 모든 내용을 주석 처리 함 )

function example() { //comment console.log('TEST'); }

좋음 (댓글 포함)

function example() { /* comment */ console.log('TEST'); }

또한, "텍스트"는 캐스팅에도 "텍스트"를 참조하는 것처럼 ""텍스트를 사용해야합니다.
— Bay

1

제 경우에는 자바 스크립트를 동적으로 추가하고 문자열 템플릿에서 큰 따옴표를 2 번 사용하여 두 번째 따옴표를 작은 따옴표로 변경하고 오류가 사라졌습니다. 같은 이유로 여기에 오는 사람들도 도움이 되길 바랍니다.


addthis를 사용하여 이중 문자열로 URL에 추가 한 다음 작은 따옴표로 변경하고 콘솔 오류가 사라졌습니다
— tfa

0

am / pm 토글을 누를 때 angularjs-uib-datepicker에 대한 UI 부트 스트랩 지시문을 사용하여 비슷한 문제에 직면했습니다.

(알 수 없음)에 대한 이벤트 핸들러 오류 : 구문 오류 : 예기치 않은 JSON 입력 각도 시간 선택기 끝

플러그인 'Trans-over' (클릭했을 때 단어를 번역) 때문이었습니다. 인터넷에서 아무것도 찾지 못했기 때문에 내 대답이 누군가를 도울 것입니다.


0

비동기 작업이므로 onreadystatechangeresponseText에 값이로드되기 전에 발생할 수 있으므로 a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); 를 사용 하여 오류가 지속되는지 확인하십시오. 볼


0

이 오류가 있었고에 가드를 추가하여 고정 readyState하고 status여기에 표시된 :

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
          // Your code here
   }
};

0

앵커 태그에서 오류가 발생하면 "Onclick"을 "href"로 바꾸거나 "href"를 "Onclick"으로 바꾸십시오.


0

요청에 Accept헤더를 설정하면 application/json동일한 문제가 발생했을 때 효과가있었습니다.


0

빈 JSON을 구문 분석하려고하면이 오류가 발생할 수 있습니다.

서버 등으로부터 응답을 받으면 비어 있지 않은지 먼저 확인하십시오. 예를 들면 다음과 같습니다.

function parseJSON(response) {
    if (response.status === 204 || response.status === 205) {
        return null;
    }
    return response.json();
}

그런 다음 다음을 사용하여 가져올 수 있습니다.

fetch(url, options).then(parseJSON); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.