У меня есть страница, на которой пользователь может редактировать различные материалы с помощью кнопок и выбирать, которые вызывают вызовы ajax. В частности, одно действие приводит к тому, что URL-адрес должен называться удаленно, с некоторыми данными и запросом «put», который (поскольку я использую backend backend) запускает мое действие обновления. У меня также есть кнопка удаления, которая вызывает тот же URL-адрес, но с запросом «удалить». «Ajax» «update» работает во всех браузерах, но «delete» не работает в IE. У меня есть смутное воспоминание о том, что я встречаю нечто подобное раньше ... может ли кто-нибудь пролить свет? вот мои Ajax звонков:Проблема с jQuery.ajax с методом 'delete', т. Е.
//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);
}
});
}
Я поставил предупреждение в успехе и ошибках удаления, AJAX, чтобы посмотреть, что происходит, и «ошибка» часть вызова AJAX запускается, но без вызова, MADE TO THE BACK END (я знаю это, наблюдая за журналами моего заднего сервера). Таким образом, он терпит неудачу, прежде чем он даже сделает вызов. Я не могу понять, почему: «msg» я возвращаюсь из блока ошибок пустым.
Любые идеи кто-нибудь? Это известная проблема? Я тестировал его в ie6 и ie8, и он тоже не работает.
спасибо - не более
EDIT - решение - благодаря Нику Craver указал мне в правильном направлении.
Рельсы (и, возможно, другие фреймворки?) Имеют уловку для неподдерживаемых запросов на отправку и удаление: почтовый запрос с параметром «_method» (обратите внимание на подчеркивание), установленным на «put» или «delete», будет обрабатываться как если фактическим типом запроса была эта строка. Так, в моем случае, я сделал это изменение - обратите внимание на опцию «Данные» ':
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);
}
});
}
Rails теперь будет рассматривать это как если бы это был запрос удаления, сохранения системы REST. Причина, по которой мой пример PUT работал только потому, что в этом конкретном случае IE был рад отправить запрос PUT, но он официально не поддерживает их, поэтому лучше всего делать это для запросов PUT, а также для запросов DELETE.
Можете ли вы добавить версию IE в свой тег вопроса –
спасибо !!!!!!!!! –
это не сработало для меня, дает GET 404, это потому, что у меня есть dataType: 'script'? Когда я удаляю «dataType:« script », он отлично работает на Chrome, но снова перестает работать на IE9, любые предложения? – KG2289