Tengo una página donde el usuario puede editar varios contenidos usando botones y selecciona que active las llamadas ajax. En particular, una acción hace que una url se llame de forma remota, con algunos datos y una solicitud 'put', que (ya que estoy utilizando un backend restful carriles) desencadena mi acción de actualización. También tengo un botón de eliminar que llama a la misma URL pero con una solicitud de 'eliminar'. La llamada 'update' ajax funciona en todos los navegadores pero la 'borrar' no funciona en IE. Tengo un vago recuerdo de haber encontrado algo así antes ... ¿alguien puede arrojar algo de luz? Aquí está mi llamadas ajax:Problema con jQuery.ajax con el método 'eliminar' en, por ejemplo,
//update action - works in all browsers
jQuery.ajax({
async:true,
data:data,
dataType:'script',
type:'put',
url:"/quizzes/"+quizId+"/quiz_questions/"+quizQuestionId,
success: function(msg){
initializeQuizQuestions();
setPublishButtonStatus();
}
});
//delete action - fails in ie
function deleteQuizQuestion(quizQuestionId, quizId){
//send ajax call to back end to change the difficulty of the quiz question
//back end will then refresh the relevant parts of the page (progress bars, flashes, quiz status)
jQuery.ajax({
async:true,
dataType:'script',
type:'delete',
url:"/quizzes/"+quizId+"/quiz_questions/"+quizQuestionId,
success: function(msg){
alert("success");
initializeQuizQuestions();
setSelectStatus(quizQuestionId, true);
jQuery("tr[id*='quiz_question_"+quizQuestionId+"']").removeClass('selected');
},
error: function(msg){
alert("error:" + msg);
}
});
}
pongo la alerta en el éxito y el error en el Ajax de borrado sólo para ver lo que ocurre, y la parte de 'error' de la llamada AJAX se dispara, pero sin llamar están realizando para EL FINAL DE LA PARTE POSTERIOR (lo sé viendo los registros de mi servidor back-end). Por lo tanto, falla antes incluso de realizar la llamada. No puedo entender por qué: el 'mensaje' que recibí del bloque de error está en blanco.
¿Alguna idea a alguien? ¿Es este un problema conocido? Lo he probado en ie6 y ie8 y tampoco funciona.
gracias - max
EDIT - la solución - gracias a Nick Craver para mí apuntando en la dirección correcta. Los rieles (y tal vez otros marcos?) Tienen un subterfugio para las solicitudes de envío y eliminación no admitidas: una solicitud posterior con el parámetro "_method" (observe el subrayado) establecido en "poner" o "eliminar" se tratará como si el tipo de solicitud real fue esa cadena. Por lo tanto, en mi caso, he hecho este cambio - en cuenta la opción de 'datos' ':
jQuery.ajax({
async:true,
data: {"_method":"delete"},
dataType:'script',
type:'post',
url:"/quizzes/"+quizId+"/quiz_questions/"+quizQuestionId,
success: function(msg){
alert("success");
initializeQuizQuestions();
setSelectStatus(quizQuestionId, true);
jQuery("tr[id*='quiz_question_"+quizQuestionId+"']").removeClass('selected');
},
error: function(msg){
alert("error:" + msg);
}
});
}
rieles ahora trataremos esto como si se tratara de una solicitud de eliminación, la preservación del sistema REST. La razón por la que funcionó mi ejemplo PUT fue porque en este caso particular, IE estaba feliz de enviar una solicitud PUT, pero oficialmente no los admite, por lo que es mejor hacer esto para las solicitudes PUT y para las solicitudes DELETE.
puede usted por favor añadir la versión de IE en su etiqueta pregunta –
gracias !!!!!!!!! –
esto no funcionó para mí, da un GET 404, ¿esto es porque tengo dataType: 'script'? Cuando elimino "dataType: 'script'", funciona muy bien en Chrome, pero deja de funcionar en IE9, ¿alguna sugerencia? – KG2289