У меня есть страница, где пользователь может редактировать различный контент, используя кнопки и выбирая, которые вызывают вызовы ajax.В частности, одно действие вызывает удаленный вызов URL с некоторыми данными и запросом «put», который (так как я использую серверную часть restful rails) запускает мое действие обновления.У меня также есть кнопка удаления, которая вызывает тот же URL, но с запросом «удалить».Ajax-вызов «update» работает во всех браузерах, но «delete» не работает в IE.У меня смутные воспоминания о том, что я встречал что-то подобное раньше ... может кто-нибудь пролить свет?вот мои вызовы ajax:
//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, но без вызоваСДЕЛАНО НА ЗАДНЕМ КОНЦЕ (я знаю это по просмотру логов моего сервера).Таким образом, он терпит неудачу, прежде чем он даже делает звонок.Я не могу понять, почему - сообщение, которое я получаю из блока ошибок, пустое.
Любые идеи кто-нибудь?Это известная проблема?Я протестировал его в ie6 и ie8, и он не работает ни в одном.
спасибо - max
EDIT - решение - спасибо Nick Craver за то, что он указал мне правильное направление.
В Rails (и, возможно, в других фреймворках?) Есть отговорка для неподдерживаемых запросов put и delete: почтовый запрос с параметром "_method" (обратите внимание на подчеркивание), установленным на "put" или "delete",обрабатывается так, как если бы фактический тип запроса был этой строкой.Итак, в моем случае я сделал это изменение - обратите внимание на опцию «data»:
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.