[英]Problem with jQuery.ajax with 'delete' method in ie
我有一個頁面,用戶可以在其中使用按鈕編輯各種內容,並選擇觸發ajax調用的頁面。 特別是,一個動作導致一個帶有一些數據和一個“ put”請求的URL遠程調用,這(如我使用的是寧靜的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'
發出請求的類型(“ POST”或“ GET”),默認為“ GET”。 注意:其他HTTP請求方法(例如PUT和DELETE)也可以在此處使用,但並非所有瀏覽器都支持。
相反,我會嘗試將其包含在您的數據中,然后在服務器端進行查找,如下所示:
data: {'action': 'delete'},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.