簡體   English   中英

jQuery.ajax在IE中帶有“刪除”方法的問題

[英]Problem with jQuery.ajax with 'delete' method in ie

我有一個頁面,用戶可以在其中使用按鈕編輯各種內容,並選擇觸發ajax調用的頁面。 特別是,一個動作導致一個帶有一些數據和一個“ put”請求的U​​RL遠程調用,這(如我使用的是寧靜的rails后端)觸發了我的更新動作。 我還有一個刪除按鈕,它調用相同的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調用的“錯誤”部分,但是后端沒有任何提示(我通過觀察后端知道這一點服務器日志)。 因此,它在進行呼叫之前就失敗了。 我不知道為什么-我從錯誤塊中得到的'msg'是空白的。

有任何想法嗎? 這是一個已知問題嗎? 我已經在ie6和ie8中對其進行了測試,但在任何一個中均不起作用。

謝謝-最大

編輯-解決方案-感謝Nick Craver為我指出了正確的方向。

Rails(也許還有其他框架?)對不支持的放置和刪除請求有一個替代:將參數“ _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 7和8不支持DELETE和PUT方法。 我遇到了一個問題,即IE7,8不會遵循302重定向,而IE會使用DELETE或PUT方法獲取應該重定向到的位置(使用get方法)。

為了確保IE7和8正常工作,我將使用帶有以下參數的POST:

data: {'_method': 'delete'}

看一下您的type屬性type:'delete'

關於jQuery的文檔類型

發出請求的類型(“ POST”或“ GET”),默認為“ GET”。 注意:其他HTTP請求方法(例如PUT和DELETE)也可以在此處使用,但並非所有瀏覽器都支持。

相反,我會嘗試將其包含在您的數據中,然后在服務器端進行查找,如下所示:

data: {'action': 'delete'},

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM