ข้อผิดพลาดของ JavaScript (Uncaught SyntaxError: สิ้นสุดการป้อนข้อมูลที่ไม่คาดคิด)


211

ฉันมีรหัสจาวาสคริปต์บางอย่างที่ทำงานใน FireFox แต่ไม่ใช่ใน Chrome หรือ IE

ใน Chrome JS Console ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

"Uncaught SyntaxError: การสิ้นสุดอินพุตที่ไม่คาดคิด".

รหัส JavaScript ที่ฉันใช้คือ:

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

มันบอกว่าข้อผิดพลาดอยู่ในบรรทัดสุดท้ายซึ่งก็คือ });


2
ฉันรู้ว่า V8 ของ Chrome สำหรับDELETEบนเซิร์ฟเวอร์หากการตอบสนองคือ 200 successแทนที่จะเป็น204 success - no responseฉันจะได้รับข้อผิดพลาดนี้เช่นกัน เพียงแค่หัวขึ้นในกรณีที่ใครก็ได้รับเช่นนี้
Eric D. Johnson

คำตอบ:


402

});เพิ่มเป็นครั้งที่สอง

เมื่อเยื้องอย่างเหมาะสมรหัสของคุณจะอ่าน

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

$(function() {คุณไม่เคยปิดด้านนอก


278
บทเรียนคือเยื้องรหัสของคุณเสมอ (และเยื้องอย่างถูกต้อง)
Slaks

4
โอ้มนุษย์ฉันหวังว่า VIM ของฉันจะตรวจพบข้อผิดพลาดทางไวยากรณ์นั้น ฉันไม่อยากจะเชื่อเลยว่าฉันต้องเสียเวลาไปมากแค่ไหนที่มีข้อผิดพลาดทางไวยากรณ์
HeyWatchThis

4
บทเรียนคือใช้โปรแกรมแก้ไขที่ดีกับปลั๊กอินที่ดีซึ่งสามารถตรวจจับการจับคู่วงเล็บเน้นมันหรือแม้แต่แก้ไขปัญหา
Sławomir Lenart

1
@HeyWatchThis คุณอาจลองใช้ Syntastic เป็นกลุ่ม
นาธานลอง

1
ฉันใช้ neomake สำหรับ vim / neovim ตั้งค่าให้รัน jshint ทุกครั้งที่ฉันบันทึกไฟล์ JavaScript หากฉันมีข้อผิดพลาดทางไวยากรณ์ฉันจะเห็นสัญลักษณ์เตือน / ข้อผิดพลาดในร่องของ Vim / neovim เมื่อฉันวางเคอร์เซอร์บนบรรทัดนั้นบรรทัดคำสั่ง vim / neovim จะแสดงข้อความแจ้งว่าข้อผิดพลาดคืออะไร
trusktr

89

ในกรณีของฉันฉันพยายามแยก JSON ที่ว่างเปล่า:

JSON.parse(stringifiedJSON);

สิ่งที่เกิดขึ้นคือ:

JSON.parse("");

3
นี้โชคไม่ดีประกอบไป$.parseJSONด้วย jQuery 1.11.2
Nasser Al-Wohaibi

37

http://jsbeautifier.org/เป็นประโยชน์ในการเยื้องรหัส JS ขนาดเล็กของคุณ

นอกจากนี้ด้วยGoogle Chromeคุณสามารถใช้ "พิมพ์สวย" ดูตัวอย่างหน้าจอด้านล่างที่แสดงjquery.min.jsจาก Stack Overflow ซึ่งเยื้องไปทางเบราว์เซอร์ของฉันได้อย่างชัดเจน :)

ป้อนคำอธิบายรูปภาพที่นี่


14

การจัดรูปแบบโค้ดของคุณเล็กน้อยคุณได้ปิดฟังก์ชันโฮเวอร์ด้านในเท่านั้น คุณยังไม่ได้ปิดชิ้นส่วนภายนอกทำเครื่องหมายด้านล่าง:

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

5

ในกรณีของฉันมันกลายเป็นปัญหาใบเสนอราคาแบบง่าย ๆในbookmarkletของฉันโปรดจำไว้ว่าให้ใช้เครื่องหมายคำพูดเดี่ยวบน bookmarklet เท่านั้น ในกรณีนี้จะช่วยให้ใครบางคน


3

ฉันพบข้อผิดพลาดนี้เมื่อพยายามเขียน javascript bookmarklet ฉันไม่สามารถหาสาเหตุที่ทำให้มัน แต่ในที่สุดฉันก็ลองเข้ารหัส URL bookmarklet ผ่านเว็บไซต์ต่อไปนี้: http://mrcoles.com/bookmarklet/จากนั้นข้อผิดพลาดก็หายไปดังนั้นมันจะต้องมีปัญหากับอักขระบางตัวในรหัสจาวาสคริปต์ที่ถูกตีความว่าเป็น URL พิเศษ อักขระควบคุม


2
ฉันมี // ความคิดเห็นใน js ของฉันซึ่งแสดงความคิดเห็นมากกว่าที่ฉันต้องการตั้งแต่การวางลงใน url ของ bookmarklet ทำให้รหัสทั้งหมดเป็นหนึ่งซับและ // อยู่ตรงกลางโค้ด
mflodin

การลบความคิดเห็นก็ช่วยฉันด้วยเช่นกัน
อเล็กซ์

3

ข้อผิดพลาดนี้ส่วนใหญ่เกิดจากการเรียก ajax ที่ว่างเปล่าเมื่อพยายามแยก JSON ที่ว่างเปล่า

เพื่อแก้ไขการทดสอบนี้หากข้อมูลที่ส่งคืนว่างเปล่า

$.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);
        }
    }
});


0

ฉันได้สิ่งนี้เนื่องจากฉันมีความคิดเห็นในไฟล์ที่ฉันเพิ่มใน JS ของฉันเหตุผลที่น่าอึดอัดใจจริงๆกับสิ่งที่เกิดขึ้น - แม้ว่าเมื่อคลิกที่VMไฟล์ที่แสดงผลล่วงหน้าและจับข้อผิดพลาดคุณจะพบว่า ข้อผิดพลาดคือในกรณีของฉันมันเป็นเพียงรหัส uncommenting ฉันใช้


0

ฉันยังมีข้อผิดพลาดนี้ชี้ไปที่จุดสิ้นสุดของบล็อกสคริปต์บนหน้าสุดท้ายเท่านั้นที่จะตระหนักถึงข้อผิดพลาดที่เป็นจริงจากการคลิกในองค์ประกอบที่มีแทนonclick="pagename" onclick="window.location='pagename'"มันไม่ได้เป็นฉากยึดที่ขาดหายไปเสมอไป!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.