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.