Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

213
Views
Función Done nunca llamada después de $.ajax

Soy un poco nuevo en todo esto (incluidas las devoluciones de llamada de Javascript y ES6). Estoy usando NodeJS + Express + MongoDB.

Estoy llamando a una función Ajax para actualizar un elemento y la llamada exitosa de Ajax nunca se realiza.

Aquí está mi llamada Ajax (llamada desde React)

 editBug : function(bug){ console.log('about to edit bug with these values',bug); $.ajax({ url:'/api/bugs', method: 'PUT', data:bug }) .done((jqxhr) => { console.log('succcess while editing the bug'); this.setState({successVisible : true}); }) .fail((jqxhr) => { console.log('error : ' + jqxhr); }) },

Aquí está mi función API:

 app.put('/api/bugs',function(req,res){ //console.log('req',req); console.log('query string : ',req.query); console.log('query params : ',req.params); console.log('query body: ',req.body); let id = new ObjectID(req.body._id); req.body._id = new ObjectID(req.body._id); db.collection('bugs').replaceOne( {_id:id}, req.body, function(err,result){ assert.equal(err,null); console.log('Successfull replace!'); res.status(200); } ); });

¡El Successfull replace! log se muestra correctamente en el lado del servidor. El about to edit bug with these values se muestra correctamente en la parte frontal. Pero el succcess while editing the bug no se muestra en la interfaz y parece que la llamada .done nunca se ejecuta.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

¿No necesita terminar su objeto de respuesta en el lado de Node.js? Intente agregar res.end(); o cualquier tipo de respuesta a su objeto de respuesta.

Además, puede usar la pestaña de red de Chrome (o cualquier otro navegador) para ver realmente cómo terminan sus solicitudes AJAX, para ver si se bloquean o finalizan.

over 4 years ago · Santiago Trujillo Report

0

El problema es que no está enviando ninguna respuesta al navegador del lado del nodo. Pruebe el siguiente fragmento y debería estar listo para comenzar

Además, me gustaría señalar que debe manejar los errores. Al actualizar los bugs si algo sale mal, la mejor práctica sería informar al navegador con el código de estado 500 que indica que la acción prevista falló. He agregado este aspecto en el recorte a continuación.

 app.put('/api/bugs', function(req, res) { //console.log('req',req); console.log('query string : ', req.query); console.log('query params : ', req.params); console.log('query body: ', req.body); let id = new ObjectID(req.body._id); req.body._id = new ObjectID(req.body._id); db.collection('bugs').replaceOne({ _id: id }, req.body, function(err, result) { if (err) { console.log('Failed replace'); res.status(500).end(); // <- We set the response status code and end the request } else { assert.equal(err, null); console.log('Successfull replace!'); res.status(200).end(); // <- We set the response status code and end the request } } ); });
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!