Chrome: Uncaught SyntaxError: สิ้นสุดการป้อนข้อมูลที่ไม่คาดคิด


176

เมื่อโหลดหน้าของฉันใน Google Chrome ฉันได้รับข้อผิดพลาดที่คลุมเครือในคอนโซล:

Uncaught SyntaxError: ปลายอินพุทที่ไม่คาดคิด

ฉันไม่รู้ว่าอะไรเป็นสาเหตุ ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร


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 ของพวกเขาใหญ่มากจนการถูกยกเลิกโดยไม่โหลดเต็มที่ หรือหนึ่งในเซิร์ฟเวอร์แอปของพวกเขามีข้อบกพร่องและกำลังปิดการเชื่อมต่อ http ก่อนที่จะดาวน์โหลดไฟล์ JS อย่างสมบูรณ์
เท็ดดี้

คำตอบ:


227

ข้อผิดพลาดนี้เป็นข้อเท็จจริงที่น่ารำคาญอย่างหนึ่ง . ในกรณีส่วนใหญ่ JavaScript ของคุณใช้งานไม่ได้ ตัวอย่างเช่นขาดหายไป}หรืออะไรทำนองนั้น

ตัวอย่างที่กำหนดสิ่งนี้จะทำให้ "ไม่คาดหวังจุดสิ้นสุดของอินพุต" ด้วย

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

แต่สาเหตุของปัญหาที่เกิดขึ้นน่าจะเป็นที่ที่มีการร้องขอ JSON URL มีเนื้อหาชนิดของtext/htmlที่ Chrome เห็นได้ชัดว่าพยายามที่จะแยกเป็น HTML ซึ่งจากนั้นจะส่งผลให้ปลายที่ไม่คาดคิดของการป้อนข้อมูลเนื่องจากความจริงที่ว่าแท็กภาพรวมมีการ แจง

ลองตั้งค่าประเภทเนื้อหาเป็นtext/plainฉันคิดว่าควรแก้ไขปัญหา

อย่างไรก็ตาม V8 สามารถทำงานได้ดีขึ้นเกี่ยวกับการบอกสิ่งที่อินพุตสิ้นสุดโดยไม่คาดคิด


2
ok ขอบคุณมากฉันลบคำขอ json ทั้งหมดเข้าด้วยกันและข้อผิดพลาดก็หายไปฉันยังไม่ได้คิดออกว่ามีอะไรผิดปกติกับคำขอ json ของฉัน ฉันเพิ่งไม่รู้ว่าจะเริ่มแก้จุดบกพร่องที่ไหน ถ้าฉันอาจถามว่าคุณทราบสาเหตุของปัญหาได้อย่างไร
dlaurent86

2
มันอาจจะไม่ชัดเจน ฉันได้รับข้อผิดพลาดนี้ในการย่อขนาด JS เนื่องจากมันถูก mangled โดย minimizer ในขณะที่ JS ที่ไม่ระบุชื่อนั้นถูกกฎหมายและสมบูรณ์แบบ แต่น่าเสียดายที่ Chrome จะแสดงเฉพาะสายข้อผิดพลาดที่เกิดขึ้นซึ่งสำหรับลด JS โดยปกติจะเป็นไฟล์ทั้งหมด ...
Cerin

ไม่มากที่อินพุตสิ้นสุดลง (cuz ที่จะอยู่ท้ายสุด) ค่อนข้างรู้ว่าสิ่งที่คาดหวังจะช่วยตัน
AndrewS

บันทึกหางของฉัน ฉันรู้สึกรำคาญอย่างมากกับความกำกวม ขอบคุณ
Cyprus106

4
ฉันมีข้อผิดพลาดเดียวกันเพราะฉันใช้ JSON.parse (ข้อความ) และค่าข้อความเป็นสตริงว่าง
A Khudairy

73

ลอง Firebug สำหรับ Mozilla - }มันจะแสดงตำแหน่งของที่หายไป

http://getfirebug.com/


12
ไม่จำเป็นต้องใช้ Firebug คอนโซลใน Firefox บอกให้ฉันรู้ว่าบรรทัดอะไรและตัวละครหายไปไหน
Dylan Valade

1
ไม่จำเป็นต้องมี firefug เหมือนกัน คอนโซล firefox ctrl+shift+iจะบอกคุณ
Benjamin Crouzier

1
คำเตือนหากสคริปต์ถูกย่อให้เล็กสุดบรรทัดเดียวให้คาดหวังว่า Firefox จะหยุดทำงานเป็นเวลาหลายนาที / ชั่วโมง / ปี
Cerin

1
นี่เป็นวิธีที่ง่ายที่สุดในการติดตามข้อผิดพลาดทางไวยากรณ์เหล่านี้
BentOnCoding

พระเจ้าของฉันขอบคุณ ฉันรู้สึกว่าโครเมี่ยมอยู่ไกลมากเมื่อเทียบกับ Firefox ในแง่ของเครื่องมือสำหรับนักพัฒนา มันน่าทึ่งที่มันล้มเหลวในการทำให้สิ่งเล็ก ๆ น้อย ๆ นี้ถูกต้อง ช่วยฉันด้วยอาการปวดหัวครั้งใหญ่!
อิสยาห์ลี

33

ดูกรณีของฉันในคำถามที่คล้ายกันอื่น:

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

JSON.parse(stringifiedJSON);

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

JSON.parse("");

2
ใช่ฉันมีสิ่งนี้ด้วยเช่นกัน! คุณสามารถแก้ไขได้อย่างง่ายดายด้วยการให้ "{}" แทนที่จะเป็นสตริงว่าง
cronoklee

1
ฉันได้รับ json ที่ว่างเปล่าเนื่องจากมีการทับสองครั้งใน URL (เช่น localhost: 8080 // mypath / blagh) และเซิร์ฟเวอร์กำลังส่งคืนการตอบกลับที่ว่างเปล่าสำหรับสิ่งนี้
jpierson

1
ฉันมาที่นี่เพื่อยืนยันวิธีแก้ปัญหานี้
LuísAssunção

10

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันได้ปิดอักขระวงเล็บปีกกา ( }) ในโค้ด JavaScript ตรวจสอบว่าเครื่องมือจัดฟันของคุณมีความสมดุลอย่างเหมาะสม


10

สำหรับบันทึกสำหรับทุกคนที่พยายามค้นหาสาเหตุต่าง ๆ สำหรับข้อผิดพลาดนี้ แอตทริบิวต์ข้อมูล HTML5 ว่างเปล่า

data-mydata = ''

ทำให้เกิดข้อผิดพลาดเช่นกัน คุณควรตรวจสอบว่าค่าข้อมูลเป็นสตริงว่างและไม่รวมแอตทริบิวต์เลย มันไม่ได้บอกว่าสิ่งนี้เกี่ยวข้องกับ HTML ที่สร้างขึ้นเป็นสคริปต์


จะไม่ได้คิดออกโดยไม่มีคุณ ฉันใช้ VideoJS และฉันก็คัดลอก html สำหรับเครื่องเล่นวิดีโอของพวกเขาจากหน้าเว็บของพวกเขา มีตัวยึดตำแหน่งข้อมูลที่คุณสามารถใช้ แต่ฉันไม่ได้ วิดีโอไม่โหลดและฉันได้รับข้อผิดพลาดที่ทุกคนกำลังพูดถึง หลังจากลบdata-setup='{"example_option":true}' ทุกอย่างทำงานได้ดี
Tyler Buchea

1
@ user1002379 มีความสุขฉันสามารถช่วยได้
DroidOS

8

ปัญหาสำหรับฉันคือฉันกำลังทำ $ .ajax พร้อมกับdataType: "json"คำขอ POST ที่ส่งคืน HTTP 201 (สร้างแล้ว) และไม่มีเนื้อหาคำขอ การแก้ไขคือการลบคีย์ / ค่านั้น


ฉันเริ่มคำขอ ajax (อัปโหลด) และยกเลิกก่อนที่จะเสร็จสิ้นและฉันได้รับข้อผิดพลาดนี้
ดัสติน Poissant

6

JSHintดีในการค้นหาตำแหน่งของวงเล็บที่ขาดหายไปหรือไวยากรณ์ไม่ถูกต้อง


6

สาเหตุอีกประการของข้อผิดพลาดนี้: หาก API ของคุณตอบกลับโดยไม่มีเจตนา แต่ตอบกลับด้วย200 OKรหัสสถานะแทน204 No Contentรหัสสถานะ ห้องสมุด JavaScript บางแห่งอาจตอบสนองต่อเนื้อหาประเภทที่ไม่คาดคิดได้ดีเมื่อไม่มีเนื้อหาดังนั้นให้ใช้รหัสสถานะที่ถูกต้อง!


3

จะมีวงเล็บเปิดซึ่งทำให้เกิดข้อผิดพลาดอย่างแน่นอน

ฉันขอแนะนำให้คุณเปิดหน้าใน Firefox จากนั้นเปิด Firebug และตรวจสอบคอนโซล - มันจะแสดงสัญลักษณ์ที่หายไป

ภาพตัวอย่าง:

Firebug เน้นข้อผิดพลาด


2

ปัญหาของฉันเกิดจากแคช Google Chrome ฉันทดสอบสิ่งนี้โดยใช้แอปพลิเคชันเว็บของฉันบน Firefox และฉันไม่พบข้อผิดพลาดนั้น ดังนั้นฉันจึงตัดสินใจลองล้างแคชของ Google Chrome และใช้งานได้


1

ในกรณีที่โค้ด JavaScript ของคุณถูกย่อขนาดเป็นหนึ่งบรรทัดสาเหตุอื่นสำหรับข้อผิดพลาดนี้ใช้//แทน/**/ความคิดเห็นของคุณ

ไม่ดี (แสดงความคิดเห็นทุกอย่างหลังจาก//รวมการปิด}ฟังก์ชั่นของคุณ)

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

ดี (จำกัด ความคิดเห็นของคุณ)

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

ทำงานได้ดียิ่งขึ้นคุณควรใช้ \ "the-text \" ตามที่อ้างถึง "the-text" สำหรับการส่ง
เบย์

1

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


ใช้ addthis ฉันผนวกเข้ากับ url ด้วย double string แล้วเปลี่ยนเป็นอัญประกาศเดี่ยวและข้อผิดพลาดของคอนโซลหายไป
tfa

0

ฉันประสบปัญหาคล้ายกันโดยใช้คำสั่ง ui bootstrap สำหรับ angularjs - uib-datepicker เมื่อกด am / pm toggle

ข้อผิดพลาดในตัวจัดการเหตุการณ์สำหรับ (ไม่ทราบ): SyntaxError: จุดสิ้นสุดที่ไม่คาดคิดของการเลื่อนเวลาเชิงมุมของอินพุต JSON

ปรากฎว่าเป็นเพราะปลั๊กอิน'Trans-over' (ซึ่งแปลคำเมื่อมีการคลิก) บางทีคำตอบของฉันจะช่วยใครซักคนเพราะฉันไม่พบอะไรบนอินเทอร์เน็ต


0

เนื่องจากเป็นการดำเนินการแบบอะซิงก์onreadystatechangeอาจเกิดขึ้นก่อนที่ค่าจะถูกโหลดใน responseText ลองใช้ a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); เพื่อดูว่าข้อผิดพลาดยังคงอยู่หรือไม่? BOL


0

ฉันมีข้อผิดพลาดนี้และแก้ไขได้โดยเพิ่มตัวป้องกันreadyStateและstatusแสดงที่นี่:

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

0

หากคุณมีข้อผิดพลาดที่ Anchor tag เพียงแค่แทนที่ "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.