在ie中使用'delete'方法的jQuery.ajax问题

Max*_*ams 11 javascript ajax jquery internet-explorer

我有一个页面,用户可以使用按钮编辑各种内容,并选择触发ajax调用.特别是,一个动作导致一个url被远程调用,有一些数据和一个'put'请求,(因为我正在使用一个宁静的rails后端)触发我的更新操作.我还有一个删除按钮,它调用相同的URL,但有一个'删除'请求.'update'ajax调用适用于所有浏览器,但'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);
      }
    });     
  }
Run Code Online (Sandbox Code Playgroud)

我把删除ajax中的警报成功和错误只是为了看看会发生什么,并且触发了ajax调用的'错误'部分,但没有调用到后端(我知道这是通过观察我的后端服务器日志).所以,它甚至在打电话之前就失败了.我无法理解为什么 - 我从错误块返回的'msg'是空白的.

任何人的想法?这是一个已知的问题吗?我已经在ie6和ie8中对它进行了测试,但它在两者中都不起作用.

谢谢 - 最大

编辑 - 解决方案 - 感谢Nick Craver指出我正确的方向.

Rails(可能还有其他框架?)对不支持的put和delete请求有一个诡计:带有参数"_method"(注意下划线)设置为'put'或'delete'的post请求将被视为实际请求type是那个字符串.所以,就我而言,我做了这个改变 - 注意'数据'选项':

   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);
      }
    });     
  }
Run Code Online (Sandbox Code Playgroud)

Rails现在将此视为删除请求,保留REST系统.我的PUT示例工作的原因仅仅是因为在这种特殊情况下IE很高兴发送PUT请求,但它正式不支持它们,因此最好对PUT请求和DELETE请求执行此操作.

Pep*_*ppy 13

IE 7和8不支持DELETE和PUT方法.我有一个问题,IE7,8不会遵循302重定向,IE会使用DELETE或PUT方法,它应该重定向到的位置(使用get.)

为确保IE7和8正常工作,我将使用带参数的POST:

data: {'_method': 'delete'}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ver 8

看一下你的type属性 type:'delete'

关于类型的jQuery文档:

要求的类型("POST"或"GET"),默认为"GET".注意:此处也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持它们.

我会尝试将其包含在您的数据中并在服务器端查找,如下所示:

data: {'action': 'delete'},
Run Code Online (Sandbox Code Playgroud)

  • @Max - 只是为了踢,尝试`type:'DELETE'`看看会发生什么.是的抖动刚刚发现旧的测试笔记,IE6是IE7可能支持它的上层套装. (4认同)