Проблема с jQuery.ajax с 'удаляет' метод в т.е.

У меня есть страница, где пользователь может отредактировать различный довольный кнопки использования и выбирает тот триггер 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 был рад отправить ПОМЕЩЕННЫЙ запрос, но это официально не поддерживает их так, лучше делать это для ПОМЕЩЕННЫХ запросов, а также УДАЛЯЕТ запросы.

11
задан Max Williams 18 March 2010 в 10:51
поделиться

1 ответ

Взгляните на свой атрибут типа type: 'delete'

Документация jQuery по типу :

Тип запрос на выполнение («POST» или «GET»), по умолчанию - «GET». Примечание. Здесь также можно использовать другие методы HTTP-запроса, такие как PUT и DELETE, но они поддерживаются не всеми браузерами.

Вместо этого я бы попробовал включить это в ваши данные и искать на стороне сервера, например:

data: {'action': 'delete'},
8
ответ дан 3 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: