gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:18:19 25 4
gpt4 key购买 nike

我有一个页面,用户可以在其中使用按钮编辑各种内容,并选择触发 ajax 调用。特别是,一个操作会导致远程调用一个 url,其中包含一些数据和一个“put”请求,这(因为我使用的是 restful 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);
}
});
}

我在 delete ajax 中将警报设置为成功和错误,只是为了看看会发生什么,并且触发了 ajax 调用的“错误”部分,但没有对后端进行调用(我通过观看知道这一点我的后端服务器日志)。因此,它甚至在调用之前就失败了。我不知道为什么 - 我从错误 block 返回的“消息”是空白的。

有什么想法吗?这是一个已知问题吗?我已经在 ie6 和 ie8 中测试过它,但它在任何一个中都不起作用。

谢谢 - 最大

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

Rails(也许还有其他框架?)对不受支持的放置和删除请求有一个诡计:将参数“_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);
}
});
}

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'}

关于javascript - jQuery.ajax 在 ie 中使用 'delete' 方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com