Chrome: sintaxis Error de sintaxis: final de entrada inesperado


176

Al cargar mi página en Google Chrome, aparece un vago error en la consola:

SyntaxError no capturado: final de entrada inesperado

No tengo idea de qué lo está causando. ¿Cómo haría para depurar este error?


2
Verificar la respuesta en un sniffer de red puede darte una pista. Supongo que el Content-lengthencabezado especifica más bytes de los que contiene la respuesta, o tal vez el servidor de alguna manera envía HTML no válido.
tdammers

2
Missing} la mayor parte del tiempo (javascript). Verifique el final de sus clases y funciones. Intente simplemente agregar otro cierre} al final de su secuencia de comandos y vuelva a formatear automáticamente su código. Si hay alguna sangría extraña en su código, entonces es probable que en algún lugar justo antes sea el lugar donde desapareció un}.
OG Sean

Tuve este problema al cargar JS incorrectamente. Lo cargué como <script>https://example.com/a.js</script>y debería haber sido<script src="https://example.com/a.js"></script>
Daniel Apt

Hoy recibo este error en Google Sheets. Supongo que uno de sus archivos JS es tan grande que se termina sin cargar completamente. O uno de sus servidores de aplicaciones tiene un error y está cerrando la conexión http antes de que el archivo JS se descargue por completo.
Teddy

Respuestas:


227

Este error particular es un hecho molesto sobre . En la mayoría de los casos, su JavaScript está roto de alguna manera. Por ejemplo, falta un }o algo así.

Ejemplo dado, esto también producirá "Fin de entrada inesperado":

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

Pero la causa raíz de los problemas parece ser que la URL JSON solicitada tiene un tipo de contenido del text/htmlcual Chrome aparentemente intenta analizar como HTML, lo que resulta en un final inesperado de entrada debido al hecho de que las etiquetas de imagen incluidas están siendo analizado

Intente configurar el Tipo de contenido en text/plainCreo que debería solucionar los problemas.

No obstante, V8 podría hacer un mejor trabajo al decirle a uno exactamente dónde terminó inesperadamente la entrada.


2
ok Muchas gracias, eliminé la solicitud json todos juntos y el error desapareció, todavía tengo que descubrir qué es exactamente lo que está mal con mi solicitud json. No tenía idea de por dónde empezar a depurar. si puedo preguntar cómo determinaron la causa raíz
dlaurent86

2
Puede que no sea tan obvio. Obtuve este error en JS minimizado debido a que fue minimizado por el minimizador, mientras que el JS no minificado era perfectamente legal y válido. Desafortunadamente, Chrome solo muestra la línea donde se produce el error, que para JS minimizado suele ser el archivo completo ...
Cerin

No tanto donde terminó la entrada (porque eso sería al final). Más bien, saber lo que se esperaba ayudaría a toneladas.
AndrewS

Salvó mi cola. Me estaba poniendo terriblemente molesto por la ambigüedad. Gracias.
Chipre106

44
Tuve el mismo error, porque estaba usando JSON.parse (texto) y el valor del texto era una cadena vacía
un Khudairy del

73

Prueba Firebug para Mozilla: mostrará la posición de los desaparecidos }.

http://getfirebug.com/


12
No necesitaba Firebug. La consola en Firefox me dijo exactamente qué línea y qué personaje faltaba
Dylan Valade

1
Tampoco necesitaba firefug. La consola de Firefox ctrl+shift+ite lo dirá.
Benjamin Crouzier

1
Advertencia, si el script se minimiza en una sola línea enorme, espere que Firefox se cuelgue durante varios minutos / horas / años.
Cerin

1
Esta es, con mucho, la forma más fácil de rastrear estos errores de sintaxis
BentOnCoding

Dios mío, gracias. Siento que Chrome está muy por delante en comparación con Firefox en términos de herramientas para desarrolladores. Sin embargo, es sorprendente cómo no logra hacer bien esta pequeña cosa. me salvó de un gran dolor de cabeza!
Isaiah Lee

33

Vea mi caso sobre otra pregunta similar :

En mi caso, estaba tratando de analizar un JSON vacío:

JSON.parse(stringifiedJSON);

En otras palabras, lo que sucedió fue lo siguiente:

JSON.parse("");

2
Sí, tuve este también! Puede resolver fácilmente proporcionando "{}" en lugar de una cadena vacía
cronoklee

1
Estaba recibiendo json vacío debido a una barra diagonal doble en una URL (por ejemplo, localhost: 8080 // mypath / blagh) y el servidor devolvía una respuesta vacía para esto.
jpierson

1
Vine aquí solo para confirmar esta solución.
Luís Assunção

10

Recibo este error cuando omito un carácter de llave de cierre ( }) en el código JavaScript. Verifique que sus frenillos estén correctamente balanceados.


10

Para el registro, para cualquiera que intente encontrar las diversas causas de este error. Un atributo de datos HTML5 vacío

data-mydata = ''

causa el error también. Debe verificar cuándo el valor de los datos es una cadena nula y no incluir el atributo en absoluto. No hace falta decir que esto es en gran medida relevante para HTML generado por script.


Nunca habría resuelto esto sin ti. Estaba usando VideoJS y copié el html para su reproductor de video desde su página. Tenía un marcador de posición de atributo de datos que podía usar, pero yo no. El video no se cargaba y recibía el error del que todos hablan. Después de eliminar, data-setup='{"example_option":true}' todo funcionó muy bien.
Tyler Buchea

1
@ user1002379, feliz de poder ayudar.
DroidOS

8

El problema para mí fue que estaba haciendo $ .ajax con dataType: "json"una solicitud POST que devolvía un HTTP 201 (creado) y ningún cuerpo de solicitud. La solución fue simplemente eliminar esa clave / valor.


Comencé una solicitud ajax (carga) y la aborté antes de que se completara y recibí este error.
Dustin Poissant

6

JSHint es bueno para encontrar la ubicación de paréntesis faltantes o sintaxis incorrecta.


6

Otra causa de este error: si su API responde intencionalmente sin cuerpo de respuesta, pero responde con un 200 OKcódigo de estado en lugar de un 204 No Contentcódigo de estado. Es posible que algunas bibliotecas de JavaScript no respondan bien a tipos de contenido inesperados cuando no hay contenido, ¡así que use el código de estado correcto!


3

Definitivamente habrá un soporte abierto que causó el error.

Te sugiero que abras la página en Firefox, luego abras Firebug y compruebes la consola; mostrará el símbolo que falta.

Captura de pantalla de ejemplo:

Firebug destacando el error


2

Mi problema fue con el caché de Google Chrome. Probé esto ejecutando mi aplicación web en Firefox y no obtuve ese error allí. Entonces decidí intentar vaciar el caché de Google Chrome y funcionó.


1

En los casos en los que su código JavaScript se minimiza en una sola línea, otra causa de este error se está utilizando en //lugar de /**/sus comentarios.

Malo (comenta todo después de //incluir el cierre }de su función)

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

Bueno (limita tu comentario)

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

Funcionado, además, debe usar \ "el texto \" como se refiere a "el texto" también para transmitir.
Bay

1

En mi caso, estaba agregando JavaScript dinámicamente y usando comillas dobles 2 veces en plantillas de cadena, así que cambié la segunda a comillas simples y el error desapareció. Espero que ayude a algunas de las personas que vienen aquí por la misma razón.


usando addthis agregué a la url con doble cadena y luego cambié a comillas simples y el error de la consola desapareció
tfa

0

Me enfrenté a un problema similar al usar la directiva ui bootstrap para angularjs - uib-datepicker, al presionar am / pm toggle.

Error en el controlador de eventos para (desconocido): SyntaxError: final inesperado del selector de tiempo angular de entrada JSON

Resultó que fue debido al complemento 'Trans-over' (que traduce una palabra cuando se hace clic). Tal vez mi respuesta ayude a alguien, porque no encontré nada en Internet.


0

Dado que es una operación asincrónica, onreadystatechangepuede ocurrir antes de que el valor se haya cargado en el texto de respuesta, intente usar a window.setTimeout(function () { JSON.parse(xhr.responseText); }, 1000); para ver si el error persiste. BOL


0

Tuve este error y lo solucioné agregando el protector readyStatey se statusmuestra aquí:

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

0

si recibió un error en la etiqueta de anclaje, simplemente reemplace "Onclick" con "href" o "href" con "Onclick"


0

Establecer el Acceptencabezado application/jsonen la solicitud funcionó para mí cuando me enfrenté al mismo problema.


0

Intentar analizar un JSON vacío puede ser la causa de este error.

Cuando reciba una respuesta del servidor o lo que sea, verifique primero si no está vacío. Por ejemplo:

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

Entonces puedes buscar con:

fetch(url, options).then(parseJSON); 
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.