Ich habe eine Seite, wo der Benutzer verschiedene Inhalte mit den Tasten bearbeiten kann und wählt, dass Ajax Anrufe auslösen. Insbesondere bewirkt eine Aktion, dass eine URL remote aufgerufen wird, mit einigen Daten und einer "put" -Anforderung, die (wie ich ein ruhiges Rails-Backend verwende) meine Aktualisierungsaktion auslöst. Ich habe auch eine Schaltfläche zum Löschen, die die gleiche URL aber mit einer 'Löschen' Anfrage aufruft. Der "Update" -Ajax-Aufruf funktioniert in allen Browsern, aber der "Löschen" -Anruf funktioniert nicht in IE. Ich habe eine vage Erinnerung daran, dass ich auf so etwas gestoßen bin ... kann jemand Licht ausstrahlen? hier ist meine Ajax-Aufrufe:Problem mit jQuery.ajax mit 'löschen' Methode in ie
//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);
}
});
}
ich die Warnungen in Erfolg und Fehler in der Lösch Ajax setzen nur um zu sehen, was passiert, und die ‚Fehler‘ Teil des Ajax-Aufruf ausgelöst, aber ohne CALL-Verweisungen auf THE BACK END (Ich weiß das, indem ich meine Backend-Server-Logs anschaue). Also, es schlägt fehl, bevor es überhaupt den Anruf macht. Ich kann nicht herausfinden, warum - die 'msg', die ich vom Fehlerblock zurückbekomme, ist leer.
Irgendwelche Ideen jemand? Ist das ein bekanntes Problem? Ich habe es in ie6 und ie8 getestet und es funktioniert auch nicht in beiden.
Dank - max
EDIT - die Lösung - dank Nick Craver für mich in der richtigen Richtung.
Rails (und vielleicht andere Frameworks?) Hat eine Täuschung für die nicht unterstützten Put- und Delete-Requests: eine Post-Anfrage mit dem Parameter "_method" (Unterstrich beachten) wird auf 'put' oder 'delete' gesetzt wenn der tatsächliche Anforderungstyp diese Zeichenfolge war. Also, in meinem Fall habe ich diese Änderung - beachten Sie die ‚data‘ Option ':
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 wird dies jetzt behandeln, als ob es sich um eine Löschanfrage waren, das System REST erhalten. Der Grund, warum mein PUT-Beispiel funktionierte, war, dass IE in diesem speziellen Fall gerne eine PUT-Anfrage gesendet hat, aber offiziell nicht unterstützt. Daher ist es am besten, dies sowohl für PUT-Anfragen als auch für DELETE-Anfragen zu tun.
können Sie bitte IE-Version in Ihrem Frage-Tag –
dank !!!!!!!!! –
das hat nicht für mich funktioniert, gibt ein GET 404, ist das, weil ich dataType: 'script' habe? Wenn ich "dataType: 'script'" entferne, funktioniert es zwar in Chrome, funktioniert aber nicht mehr auf IE9, irgendwelche Vorschläge? – KG2289