Lỗi JavaScript (Uncaught SyntaxError: Kết thúc đầu vào không mong đợi)


211

Tôi có một số mã JavaScript hoạt động trong FireFox nhưng không có trong Chrome hoặc IE.

Trong Bảng điều khiển Chrome JS, tôi gặp lỗi sau:

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

Mã JavaScript tôi đang sử dụng là:

<script>
 $(function() {
 $("#mewlyDiagnosed").hover(function() {
    $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
 }, function() {
    $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
 });
</script>

Nó báo lỗi là ở dòng cuối cùng });


2
Tôi biết rằng V8 của Chrome, đối với DELETEmáy chủ nếu phản hồi là 200 successthay vì 204 success - no response tôi cũng sẽ gặp lỗi này. Chỉ cần đứng lên trong trường hợp bất cứ ai cũng nhận được điều này là tốt.
Eric D. Johnson

Câu trả lời:


401

Thêm một giây });.

Khi được thụt lề đúng cách, mã của bạn sẽ đọc

$(function() {
    $("#mewlyDiagnosed").hover(function() {
        $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
    }, function() {
        $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
    });
MISSING!

Bạn không bao giờ đóng cửa bên ngoài $(function() {.


278
Bài học là, luôn thụt mã của bạn (và thụt lề chính xác).
SLaks

4
Ôi trời, tôi ước VIM của tôi đã bắt lỗi cú pháp đó. Tôi không thể tin được đôi khi tôi lãng phí bao nhiêu thời gian với các lỗi cú pháp bất cẩn.
HeyWatch This

4
Bài học là, luôn luôn sử dụng trình soạn thảo tốt với các plugin tốt, có thể phát hiện ghép cặp, làm nổi bật nó hoặc thậm chí sửa chữa các vấn đề.
Sławomir Lenart

1
@HeyWatch This Bạn có thể thử Syntastic cho Vim.
Nathan Long

1
Tôi sử dụng neomake cho vim / neovim, được định cấu hình để chạy jshint mỗi khi tôi lưu tệp JavaScript. Nếu tôi có lỗi cú pháp, tôi sẽ thấy các ký hiệu cảnh báo / lỗi trong máng xối của vim / neovim. Khi tôi đặt con trỏ trên dòng đó, dòng lệnh vim / neovim sẽ hiển thị một thông báo cho biết lỗi là gì.
trusktr

89

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("");

3
Điều này, thật đáng tiếc, bao gồm $.parseJSONjquery 1.11.2
Nasser Al-Wohaibi

37

http://jsbeautifier.org/ rất hữu ích để thụt mã JS được rút gọn của bạn.

Ngoài ra, với Google Chrome, bạn có thể sử dụng "bản in đẹp". Xem ảnh chụp màn hình ví dụ bên dưới hiển thị jquery.min.jstừ Stack Overflow độc đáo thụt lề ngay từ trình duyệt của tôi :)

nhập mô tả hình ảnh ở đây


14

Định dạng mã của bạn một chút, bạn chỉ đóng chức năng di chuột bên trong. Bạn chưa đóng các phần bên ngoài, được đánh dấu bên dưới:

$(// missing closing)
 function() { // missing closing }
     $("#mewlyDiagnosed").hover(
        function() {
            $("#mewlyDiagnosed").animate({'height': '237px', 'top': "-75px"});
        }, 
        function() {
            $("#mewlyDiagnosed").animate({'height': '162px', 'top': "0px"});
        });

5

Trong trường hợp của tôi, nó đã trở thành một vấn đề trích dẫn kép đơn giản trong bookmarklet của tôi , hãy nhớ chỉ sử dụng dấu ngoặc đơn trên bookmarklets. Chỉ trong trường hợp này giúp ai đó.


3

Tôi đã gặp lỗi này khi tôi đang cố gắng viết bookmarklet javascript. Tôi không thể tìm ra cái gì đã gây ra nó. Nhưng cuối cùng tôi đã thử mã hóa URL bookmarklet, thông qua trang web sau: http://mrcoles.com/bookmarklet/ và sau đó lỗi đã biến mất, do đó chắc chắn đã có vấn đề với một số ký tự trong mã javascript được hiểu là URL đặc biệt nhân vật điều khiển.


2
Tôi đã có một // bình luận trong js của mình, nó đã nhận xét nhiều hơn một chút so với mong muốn của tôi kể từ khi dán nó vào url của bookmarklet làm cho toàn bộ mã trở thành một lớp lót và // nằm ở giữa mã.
mflodin

Xóa bình luận đã sửa nó cho tôi là tốt.
Alex

3

Lỗi này chủ yếu là do các cuộc gọi ajax trả về trống, khi cố phân tích cú pháp JSON trống.

Để giải quyết bài kiểm tra này nếu dữ liệu trả về trống

$.ajax({
    url: url,
    type: "get",
    dataType: "json",
    success: function (response) {

        if(response.data.length == 0){
            // EMPTY
        }else{
            var obj =jQuery.parseJSON(response.data);
            console.log(obj);
        }
    }
});

3

Trong trường hợp của tôi, nó được gây ra bởi một thiếu (0)javascript:void(0)trong một neo.


0

Tôi đã nhận được điều này vì tôi có một nhận xét trong một tệp mà tôi đã thêm vào JS của mình, lý do thực sự khó xử với những gì đang diễn ra - mặc dù khi nhấp vào VMtệp được kết xuất trước và bắt lỗi, bạn sẽ tìm ra chính xác những gì lỗi là, trong trường hợp của tôi, nó chỉ đơn giản là không chú ý đến một số mã tôi đang sử dụng.


0

Tôi cũng gặp lỗi này khi chỉ đến cuối khối tập lệnh cuối cùng trên một trang, chỉ để nhận ra lỗi thực sự là do nhấp vào một phần tử onclick="pagename"thay vì onclick="window.location='pagename'". Nó không phải luôn luôn là một khung thiếu!

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.