Tôi có một trang nơi người dùng có thể chỉnh sửa nội dung khác nhau bằng cách sử dụng các nút và các lựa chọn kích hoạt cuộc gọi ajax. Đặc biệt, một hành động gây ra một url được gọi là từ xa, với một số dữ liệu và một yêu cầu 'đưa', mà (như tôi đang sử dụng một phụ trợ đường ray an toàn) kích hoạt hành động cập nhật của tôi. Tôi cũng có một nút xóa gọi cùng một url nhưng với yêu cầu 'xóa'. Cuộc gọi ajax 'cập nhật' hoạt động trong tất cả các trình duyệt nhưng trình duyệt 'xóa' không hoạt động trong IE. Tôi đã có một ký ức mơ hồ về việc gặp phải một cái gì đó như thế này trước đây ... bất cứ ai có thể làm sáng tỏ không? đây là cuộc gọi ajax của tôi:Vấn đề với jQuery.ajax với phương pháp 'xóa' tức là
//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);
}
});
}
tôi đặt các cảnh báo trong thành công và lỗi trong ajax xóa chỉ để xem những gì sẽ xảy ra, và 'lỗi' một phần của cuộc gọi ajax được kích hoạt, nhưng không có lệnh gọi được thực hiện để BACK END (tôi biết điều này bằng cách xem các bản ghi máy chủ kết thúc của tôi). Vì vậy, nó không thành công trước khi nó thực hiện cuộc gọi. Tôi không thể giải thích tại sao - 'msg' tôi lấy lại từ khối lỗi bị trống.
Có ý tưởng nào không? Đây có phải là một vấn đề được biết đến? Tôi đã thử nghiệm nó trong ie6 và ie8 và nó không hoạt động trong cả hai.
cảm ơn - tối đa
EDIT - giải pháp - nhờ Nick Craver đã chỉ cho tôi đúng hướng.
Rails (và có thể các khung công tác khác?) nếu loại yêu cầu thực tế là chuỗi đó. Vì vậy, trong trường hợp của tôi, tôi đã thực hiện thay đổi này - hãy lưu ý tùy chọn 'dữ liệu' ':
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);
}
});
}
Giờ đây, Rails sẽ coi đây là yêu cầu xóa, giữ lại hệ thống REST. Lý do ví dụ PUT của tôi làm việc chỉ vì trong trường hợp cụ thể này, IE rất vui khi gửi yêu cầu PUT, nhưng nó chính thức không hỗ trợ chúng, vì vậy tốt nhất nên làm điều này cho các yêu cầu PUT cũng như các yêu cầu DELETE.
Bạn có thể thêm phiên bản IE vào thẻ câu hỏi của bạn –
thanks !!!!!!!!! –
điều này không hiệu quả đối với tôi, đưa ra một GET 404, là vì tôi có dataType: 'script'? Khi tôi xóa "dataType: 'script'", nó hoạt động tốt trên Chrome nhưng lại ngừng hoạt động trên IE9, mọi đề xuất? – KG2289