У меня есть страница, где пользователь может отредактировать различный довольный кнопки использования и выбирает тот триггер ajax вызовы. В частности, одно действие заставляет URL быть названным удаленно, с некоторыми данными и 'помещенным' запросом, который (поскольку я использую успокоительный бэкенд направляющих) инициировал мое действие обновления. У меня также есть удалить кнопка, которая называет тот же URL, но с 'удалить' запросом. 'Обновление' ajax работы вызова во всех браузерах, но 'удаление' того не работает в 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, и это не работает в также.
спасибо - макс.
РЕДАКТИРОВАНИЕ - решение - благодаря Nick Craver для указания на меня в правильном направлении.
Направляющие (и возможно другие платформы?) имеет отговорку для помещенного неподдерживаемого, и удалите запросы: запрос сообщения с параметром "_method" (отмечают подчеркивание) набор, чтобы 'поместить' или 'удалить' будут рассматривать, как будто фактический тип запроса был той строкой. Так, в моем случае я внес это изменение - отмечают опцию 'данных'':
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);
}
});
}
Направляющие будут теперь рассматривать это, как будто это был удалить запрос, сохраняя остальных система. Причина, которой мой ПОМЕЩЕННЫЙ работавший пример был просто, потому что в данном случае IE был рад отправить ПОМЕЩЕННЫЙ запрос, но это официально не поддерживает их так, лучше делать это для ПОМЕЩЕННЫХ запросов, а также УДАЛЯЕТ запросы.
Взгляните на свой атрибут типа type: 'delete'
Тип запрос на выполнение («POST» или «GET»), по умолчанию - «GET». Примечание. Здесь также можно использовать другие методы HTTP-запроса, такие как PUT и DELETE, но они поддерживаются не всеми браузерами.
Вместо этого я бы попробовал включить это в ваши данные и искать на стороне сервера, например:
data: {'action': 'delete'},