Chrome: Uncaught SyntaxError: Kết thúc đầu vào không mong đợi


176

Khi tải trang của tôi trong Google Chrome, tôi gặp một lỗi mơ hồ trong bảng điều khiển:

Lỗi cú pháp chưa được sửa: Chưa xác định phần kết thúc nhập liệu

Tôi không biết cái gì gây ra nó. Làm thế nào tôi có thể sửa lỗi này?


2
Kiểm tra phản hồi trong trình thám thính mạng có thể cho bạn manh mối. Tôi đoán là Content-lengthtiêu đề chỉ định nhiều byte hơn phản hồi chứa hoặc có thể máy chủ bằng cách nào đó gửi HTML không hợp lệ.
tdammers

2
Thiếu} hầu hết thời gian (javascript). Kiểm tra kết thúc các lớp học và chức năng của bạn. Hãy thử chỉ thêm một lần đóng} khác vào cuối tập lệnh của bạn và tự động định lại mã của bạn. Nếu có bất kỳ vết lõm lạ nào trong mã của bạn, thì ở đâu đó ngay trước đó rất có thể là vị trí mà a} đã bị mất.
OG Sean

Tôi đã có vấn đề này khi tải JS không chính xác. Tôi đã tải nó như <script>https://example.com/a.js</script>nó phải có<script src="https://example.com/a.js"></script>
Daniel Apt

Tôi nhận được lỗi này ngày hôm nay trên Google Sheets. Tôi đoán là một trong những tệp JS của họ quá lớn đến nỗi nó bị chấm dứt mà không tải đầy đủ. Hoặc một trong các máy chủ ứng dụng của họ có lỗi và đang đóng kết nối http trước khi tệp JS được tải xuống đầy đủ.
Teddy

Câu trả lời:


227

Lỗi đặc biệt này là một thực tế khó chịu về . Trong hầu hết các trường hợp, JavaScript của bạn bị hỏng theo một cách nào đó. Ví dụ thiếu một }hoặc một cái gì đó như thế.

Ví dụ đã cho, điều này cũng sẽ mang lại "Kết thúc đầu vào không mong đợi":

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

Nhưng nguyên nhân gốc rễ của vấn đề dường như là url JSON yêu cầu có một Content-Type của text/htmlmà Chrome dường như cố gắng để phân tích dưới dạng HTML, sau đó kết quả vào cuối bất ngờ của đầu vào do thực tế rằng các thẻ hình ảnh bao gồm đang được phân tích cú pháp.

Hãy thử đặt Loại nội dung thành text/plainTôi nghĩ rằng nó sẽ khắc phục được sự cố.

Tuy nhiên, V8 có thể thực hiện công việc tốt hơn về việc nói chính xác nơi đầu vào kết thúc bất ngờ.


2
ok Cảm ơn rất nhiều, tôi đã xóa yêu cầu json cùng nhau và lỗi đã biến mất tôi vẫn chưa biết chính xác điều gì sai với yêu cầu json của tôi. tôi chỉ không biết bắt đầu gỡ lỗi ở đâu. nếu tôi có thể hỏi làm thế nào bạn xác định được nguyên nhân gốc rễ
dlaurent86

2
Nó có thể không rõ ràng. Tôi đã nhận được lỗi này trên JS đã được rút gọn do nó được xử lý bằng trình thu nhỏ, trong khi đó, mã chưa hoàn thành là hoàn toàn hợp pháp và hợp lệ. Thật không may, Chrome chỉ hiển thị dòng xảy ra lỗi, mà đối với JS được thu nhỏ thường là toàn bộ tệp ...
Cerin

Không quá nhiều nơi đầu vào kết thúc (vì đó sẽ là cuối). Thay vào đó, biết những gì được mong đợi sẽ giúp tấn.
AndrewS

Cứu cái đuôi của tôi. Tôi đã rất khó chịu bởi sự mơ hồ. Cảm ơn.
Síp106

4
Tôi cũng gặp lỗi tương tự, vì tôi đang sử dụng JSON.parse (văn bản) và giá trị văn bản là chuỗi rỗng
A Khudurine 24/2/2015

73

Hãy thử Fireorms cho Mozilla - nó sẽ hiển thị vị trí của người mất tích }.

http://getfireorms.com/


12
Không cần Firebird. Bảng điều khiển trong Firefox cho tôi biết chính xác dòng nào và ký tự nào bị thiếu
Dylan Valade

1
Cũng không cần cứu hỏa. Bảng điều khiển firefox ctrl+shift+isẽ cho bạn biết.
Benjamin Crouzier

1
Cảnh báo, nếu tập lệnh được thu nhỏ thành một dòng khổng lồ, hãy hy vọng Firefox sẽ bị treo trong vài phút / giờ / năm.
Cerin

1
Đây là cách dễ nhất để theo dõi các lỗi cú pháp này
BentOnCoding

chúa ơi, cảm ơn bạn tôi cảm thấy như chrome vượt xa so với firefox về công cụ phát triển. thật tuyệt vời làm thế nào nó thất bại để có được điều nhỏ này ngay. cứu tôi khỏi một cơn đau đầu lớn!
Ê-sai Lee

33

Xem trường hợp của tôi về một câu hỏi tương tự khác :

Trong trường hợp của tôi, tôi đã cố phân tích một JSON trống:

JSON.parse(stringifiedJSON);

Nói cách khác, những gì đã xảy ra như sau:

JSON.parse("");

2
Có tôi cũng có cái này! Bạn có thể giải quyết dễ dàng bằng cách cung cấp "{}" thay vì một chuỗi trống
cronoklee

1
Tôi đã nhận được json trống do một dấu gạch chéo kép trong một URL (ví dụ: localhost: 8080 // mypath / blagh) và máy chủ đã trả về một phản hồi trống cho việc này.
jpierson

1
Tôi đến đây chỉ để xác nhận giải pháp này.
Luís Assunção

10

Tôi gặp lỗi này khi tôi đã sử dụng ký tự dấu ngoặc nhọn ( }) trong mã JavaScript. Kiểm tra xem niềng răng của bạn đã được cân bằng đúng chưa.


10

Đối với hồ sơ, cho bất cứ ai cố gắng tìm các nguyên nhân khác nhau cho lỗi này. Thuộc tính dữ liệu HTML5 trống

data-mydata = ''

gây ra lỗi quá. Bạn nên kiểm tra khi giá trị dữ liệu là một chuỗi null và hoàn toàn không bao gồm thuộc tính. Không cần phải nói điều này phần lớn có liên quan đến HTML được tạo.


Không bao giờ có thể tìm ra điều này mà không có bạn. Tôi đã sử dụng VideoJS và tôi đã sao chép html cho trình phát video của họ từ trang của họ. Nó có một trình giữ chỗ thuộc tính dữ liệu mà bạn có thể sử dụng nhưng tôi thì không. Video không tải và tôi đã nhận được lỗi mà mọi người đang nói về. Sau khi xóa data-setup='{"example_option":true}' mọi thứ làm việc tuyệt vời.
Tyler Hội trưởng

1
@ user1002379, rất vui khi tôi có thể giúp đỡ.
DroidOS

8

Vấn đề đối với tôi là tôi đã thực hiện $ .ajax với dataType: "json"yêu cầu POST trả về HTTP 201 (đã tạo) và không có phần yêu cầu. Cách khắc phục chỉ đơn giản là loại bỏ khóa / giá trị đó.


Tôi đã bắt đầu một yêu cầu ajax (tải lên) và hủy bỏ nó trước khi nó hoàn thành và tôi đã gặp lỗi này.
Dustin Poissant 14/03/2015

6

JSHint rất giỏi trong việc tìm vị trí của dấu ngoặc bị thiếu hoặc cú pháp xấu.


6

Một nguyên nhân khác gây ra lỗi này: nếu API của bạn cố tình phản hồi không có nội dung phản hồi, nhưng phản hồi bằng 200 OKmã trạng thái thay vì 204 No Contentmã trạng thái. Một số thư viện JavaScript có thể không đáp ứng tốt với các loại nội dung không mong muốn khi không có nội dung, vì vậy hãy sử dụng mã trạng thái chính xác!


3

Chắc chắn sẽ có một khung mở gây ra lỗi.

Tôi khuyên bạn nên mở trang trong Firefox, sau đó mở Fireorms và kiểm tra bảng điều khiển - nó sẽ hiển thị biểu tượng bị thiếu.

Ảnh chụp màn hình ví dụ:

Bọ lửa làm nổi bật lỗi


2

Vấn đề của tôi là với bộ nhớ cache của Google Chrome. Tôi đã kiểm tra điều này bằng cách chạy ứng dụng web của mình trên Firefox và tôi không gặp phải lỗi đó. Vì vậy, sau đó tôi đã quyết định thử làm trống bộ nhớ cache của Google Chrome và nó đã hoạt động.


1

Trong trường hợp mã JavaScript của bạn được rút gọn thành một dòng, một nguyên nhân khác gây ra lỗi này là sử dụng //thay vì /**/nhận xét của bạn.

Xấu (nhận xét mọi thứ sau khi //bao gồm đóng }cho chức năng của bạn)

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

Tốt (giới hạn bình luận của bạn)

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

Đã làm việc, Plus, bạn nên sử dụng \ "the-text \" như đề cập đến "the-text" cũng để truyền.
Bay

1

Trong trường hợp của tôi, tôi đã thêm javascript động và sử dụng dấu ngoặc kép 2 lần trong các mẫu chuỗi nên tôi đã thay đổi dấu ngoặc kép thành dấu ngoặc đơn và lỗi đã biến mất. Tôi hy vọng nó sẽ giúp một số người đến đây vì lý do tương tự.


bằng cách sử dụng addthis, tôi đã thêm vào url bằng chuỗi kép và sau đó thay đổi thành trích dẫn đơn và lỗi bảng điều khiển đã biến mất
tfa

0

Tôi gặp phải vấn đề tương tự khi sử dụng chỉ thị ui bootstrap cho angularjs - uib-datepicker, khi nhấn am / pm để chuyển đổi.

Lỗi trong trình xử lý sự kiện cho (không xác định): SyntaxError: Kết thúc không mong muốn của đồng hồ góc đầu vào JSON

Hóa ra đó là vì plugin 'Trans-over' (dịch một từ khi nó được nhấp). Có lẽ câu trả lời của tôi sẽ giúp được ai đó, vì tôi không tìm thấy gì trên internet.


0

Vì đó là một hoạt động không đồng bộ, điều onreadystatechangenày có thể xảy ra trước khi giá trị được tải trong responsText, hãy thử sử dụng a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); để xem lỗi có còn không? BOL


0

Tôi đã có lỗi này và sửa nó bằng cách thêm bảo vệ readyStatestatushiển thị ở đây:

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

0

nếu bạn gặp lỗi ở thẻ Anchor, chỉ cần thay thế "Onclick" bằng "href" hoặc "href" bằng "Onclick"


0

Đặt Accepttiêu đề thành application/jsontrong yêu cầu làm việc cho tôi khi tôi gặp vấn đề tương tự.


0

Cố gắng phân tích cú pháp JSON trống có thể là nguyên nhân gây ra lỗi này.

Khi bạn nhận được phản hồi từ máy chủ hoặc bất cứ điều gì, hãy kiểm tra trước nếu nó không trống. Ví dụ:

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

Sau đó, bạn có thể tìm nạp với:

fetch(url, options).then(parseJSON); 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.