2012-07-04 4 views
51

que estoy tratando de actualizar un registro en la base de datos, así que estoy definiendo modelo con datos y llamar .save método(). La solicitud PUT se activa y la entrada de la base de datos se actualiza. El problema es que no se llama al éxito o se llaman devoluciones de error. ¿Qué podría ser la causa?Backbone model.save() no llamar a cualquiera de las devoluciones de llamada de error o de éxito

sessionsModel.save({ 
    error: function() { 
     alert('test'); 
    }, 
    success: function() { 
     alert('test'); 
    } 
}); 

Editar: Solicitud vuelve objeto JSON

+0

Puede ser aceptar algunas respuestas para esa pregunta/relación aceptada queda media – Deeptechtons

+0

se puede ver [el mensaje] [1] respuesta más clara aquí, que tal vez le ayude [1]: http://stackoverflow.com/questions/15021768/how-to-get-the-error-messages-in-backbone-js –

+0

Estoy consiguiendo este problema sólo cuando ejecuto mi aplicación web en una computadora de escritorio con el nuevo formato (Windows 8), mientras que en las computadoras portátiles viejas funcionan sin problemas. Puedo ver que mi devolución de llamada de éxito se ejecute en una computadora portátil más vieja (con Windows 7 para todos los navegadores). Donde las aplicaciones siguen esperando en una nueva computadora portátil con Windows 8 para todos los navegadores. – Tarun

Respuesta

73

acaba de encontrar un problema similar en el que se resolvió el problema. Tienes que poner algo como primer parámetro (puse nulo ya que mi modelo ya estaba poblado con datos explícitamente) y objetar con devoluciones de llamadas como segundo. Entonces algo así como;

sessionsModel.save(null, {success:function() {} }); 
+0

+1 acaba de picar con esto, ¿sabes si se solucionó este problema? – James

+0

También he encontrado este problema, y ​​estoy usando ese código, finalmente me doy cuenta de que mi servidor no está respondiendo, por eso no puedo desencadenar un éxito ni una devolución de error. Acabo de agregar para que alguien olvide verificar la respuesta del servidor. :) – lukaserat

23

Si bien la búsqueda en esto, llegaron por primera vez en this SO thread que no funcionaba para mí, pero parecía funcionar para otra, más tarde me encontré con this link, donde alguien había intentado null en lugar de {} como la primera parámetro.

this.model.save(null, { 
    success: function (model, response) { 
     console.log("success"); 
    }, 
    error: function (model, response) { 
     console.log("error"); 
    } 
}); 

Así que, esto funcionó para mí. Espero que esto le ayude también.

+0

Si comprueba la documentación de la columna vertebral js, verá que guardar espera un valor nulo para la llave, val pair o un objeto: http://documentcloud.github.io/backbone/docs/backbone.html # section-56 Chocando la respuesta de Yasser, con suerte, la documentación le da un poco de claridad. – chaseadamsio

+0

Gracias - me salvó un dolor de cabeza! – Fijjit

18

El servidor debe devolver un objeto JSON. Si la respuesta no es un objeto JSON, las devoluciones de llamada no se activarán. Comprobar esta solución https://stackoverflow.com/a/22176044/1579718

+3

¡Extraño pero cierto! – naomi

+4

Guau, esta fue la respuesta. Estaba devolviendo un '200 Success' sin cuerpo. Luego agregué un objeto vacío a la respuesta y funcionó. –

+0

Tengo problemas con Windows 8.1, mientras que en las versiones anteriores del sistema operativo funciona sin problemas. Pude ver que la devolución de llamada exitosa de Backbone.model.save() se ejecutó en un sistema operativo anterior (Windows 7 para todos los navegadores). Donde las aplicaciones siguen esperando en Windows 8.1 cuando se ejecutan con cualquier navegador incluso cuando el tipo de respuesta es un objeto JSON. Después de probar varias opciones para guardar Backbone.Model y el análisis, encontré que agregar dataType: 'text' y luego convertir la respuesta a JSON.parse (response) resuelve funciona en Windows 8.1. – Tarun

2

estaba sufriendo este problema - pero estaba luchando porque mi servidor estaba respondiendo con un objeto JSON válido (el modelo) y yo ya estaba usando null en mi llamada Guardar.

Como descubrí (eventualmente), antes de que se active la devolución de llamada de éxito, el modelo devuelto se pasa a través del método de validación. En mi caso, tuve un problema (obvio cuando estás buscando en el lugar correcto) que causó que el modelo devuelto se considerara no válido y posteriormente impidió la devolución de llamada exitosa.

Aunque aprecio esto no ayuda a la OP, he puesto esto en la esperanza que ayuda a otra persona con el mismo tema.

Cuestiones relacionadas