Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

242
Vistas
jQuery y Express: el éxito y el error se mezclan

Esta es una pregunta básica, pero me ha estado molestando por un tiempo y no pude encontrar ninguna pregunta coincidente en mis búsquedas hasta ahora. Entonces, disculpas si es demasiado simple o repetido.

Tengo una ruta API (basada en Express) y estoy llamando a esta ruta usando la llamada jQuery AJAX. Aquí hay un trozo simple para demostrar la configuración

 $.ajax({ url: "http://localhost:3000/admin/items/" + itemId, type: "POST", dataType: "json", data: itemData, contentType: "application/json", success: function(result){alert(result);}, error: function(xhr, ajaxOptions, thrownError){ alert("Could not update item details. Please try again later. Error: " + xhr.statusText); } });

Desde el servidor, confirmé que el código de estado devuelto es 200 y aquí está la implementación:

 collection.update({ _id : mongo.ObjectID(req.params.id) }, req.body, function(err, result) { if(err){ console.log("Error is: " + err); res.status(500).send("Could not update item with id: " + req.params.id); }else { if(result.result.n != 1){ res.status(500).send("Could not find item with id: " + req.params.id); } else{ console.log("Update successful"); res.status(200).send("Successfully updated item id: " + req.params.id); } } });

La funcionalidad funciona perfectamente, pero al final de la llamada, se llama a la función de error y la alerta que recibo es: "No se pudieron actualizar los detalles del elemento. Vuelva a intentarlo más tarde. Error: OK". Intenté una resolución simple .send sin configurar explícitamente el código de estado también, pero de alguna manera invariablemente llama a la función de error. ¿Qué me estoy perdiendo?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Además de mi comentario anterior, la razón por la que esto ocurre es porque el dataType está configurado para esperar una respuesta JSON, pero express no envía JSON. Cuando jQuery intenta analizar la respuesta, no puede y arroja un error aunque el estado de la respuesta sea 200.

Si quisiera mantener la respuesta que estaba enviando en el ejemplo inicial, simplemente eliminar el dataType de datos de la solicitud ajax sería suficiente, jQuery normalmente es bastante inteligente para descubrir qué se devuelve.

Sin embargo, si desea recibir datos JSON (como se aclara en los comentarios), reemplace su código de respuesta con algo como lo siguiente:

 res.status(200).json({ message: 'Successfully updated item', data: doc // document returned by mongo });

Recuerde cambiar las respuestas de error también a JSON. Aunque jQuery iría al bloque de error de todos modos, es por las razones equivocadas (JSON no válido en lugar del código de error) Algo como esto:

 res.status(500).json({ message: 'Server error occurred' });
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda