Javascript jQuery.ajax与';删除';ie中的方法

Javascript jQuery.ajax与';删除';ie中的方法,javascript,jquery,ajax,internet-explorer,Javascript,Jquery,Ajax,Internet Explorer,我有一个页面,用户可以使用触发ajax调用的按钮和选择来编辑各种内容。特别是,有一个操作会导致远程调用一个url,其中包含一些数据和一个“put”请求,这(当我使用RESTfulRails后端时)会触发我的更新操作。我还有一个删除按钮,它调用相同的url,但带有“删除”请求。“更新”ajax调用在所有浏览器中都有效,但“删除”调用在IE中不起作用。我有一个模糊的记忆,以前遇到过类似的事情……有人能解释一下吗?以下是我的ajax调用: //update action - works in all

我有一个页面,用户可以使用触发ajax调用的按钮和选择来编辑各种内容。特别是,有一个操作会导致远程调用一个url,其中包含一些数据和一个“put”请求,这(当我使用RESTfulRails后端时)会触发我的更新操作。我还有一个删除按钮,它调用相同的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);
      }
    });     
  }
我将警报放在deleteajax中的success和error中,只是为了看看发生了什么,ajax调用的“error”部分被触发,但没有对后端进行调用(我通过查看后端服务器日志了解这一点)。所以,它甚至在打电话之前就失败了。我不知道为什么-我从错误块返回的“msg”是空的

有什么想法吗?这是一个已知的问题吗?我已经在ie6和ie8中进行了测试,但在这两个版本中都不起作用

谢谢-马克斯

编辑-解决方案-感谢Nick Craver为我指明了正确的方向

Rails(可能还有其他框架?)为不受支持的put和delete请求提供了一个借口:参数“\u method”(注意下划线)设置为“put”或“delete”的post请求将被视为实际请求类型就是该字符串。所以,在我的例子中,我做了这个改变——注意“数据”选项:

   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'

:

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

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

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

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

为了确保IE7和IE8正常工作,我将使用带有以下参数的帖子:

data: {'_method': 'delete'}

啊。胡说。谢谢你,尼克。我想应该重新考虑一下,这意味着打破我可爱的restful模式(grrrr.还有谁知道解决这个问题的神奇方法吗?嗯,你甚至验证过IE不支持删除作为http请求方法吗?好吧,IE XHR对象也支持删除。但是你可能需要将
类型:'delete'
改为
类型:'delete'
@jitter-这里没有,只在IE8中测试过,但在每个ot中都是一样的她的浏览器,试图找到列出测试浏览器的jQuery开发说明…有一个完整的列表。检查修改后的注释。如果我没记错的话,IE在XHR中所有方法的类型都没有大写should@Max-只是为了好玩,试着键入:'DELETE',看看会发生什么。是的,jitter刚刚找到了旧的测试编号tes,IE6出局了IE7可能支持大写。你能在你的问题标签中添加IE版本吗?这对我不起作用,给出了GET 404,这是因为我有数据类型:'script'?当我删除“数据类型:'script'”时,它在Chrome上工作得很好,但再次停止在IE9上工作,有什么建议吗?