Ich habe einen Ajax-Aufruf, wo ich jQuery.ajax() verwendet, um eine Anfrage an eine MVC-Aktion. Das alles hat gut funktioniert. Aufgrund einiger Formulare, die eine Dateikontrolle haben, änderte ich sie jedoch von jQuery.ajax() zu der Verwendung von XMLHttpRequest, um sie über die HTML5-Datei-API zu senden.XMLHttpRequest nicht hinzufügen Header - "X-Requested-Mit: XMLHttpRequest"
Seit dieser Änderung wird die MVC-Aktionsmethode nicht mehr als Ajax-Anforderung angezeigt. Mit Fiddler2 habe ich festgestellt, dass es die Anforderung "X-Requested-With: XMLHttpRequest" nicht mehr hinzufügt und ich nehme an, dies ist das Problem.
Das Formular, das ich senden möchte, hat keine Dateieingabe, nur normale Textfelder usw., aber ich habe versucht, die Methode generisch zu halten, um beide zu behandeln. Im Folgenden ist der Code, den ich mit der Ajax-Anforderung senden:
// get the edit tender form
var $Form = $Button.closest('form');
var Url = $Form.attr('action');
var AjaxRequestObject = new XMLHttpRequest();
var FormDataToSend = new FormData();
$Form.find(':input').each(function() {
if ($(this).is('input[type="file"]')) {
var files = $(this)[0].files;
if (files.length > 0) {
FormDataToSend.append(this.name, files[0]);
}
} else {
FormDataToSend.append(this.name, $(this).val());
}
});
AjaxRequestObject.open('POST', Url, true);
AjaxRequestObject.onreadystatechange = function() {
if (AjaxRequestObject.readyState == 4) {
// handle response.
if (AjaxRequestObject.status == 200) {
if (!AjaxErrorExists(AjaxRequestObject.responseText,)) {
alert("success");
console.log(AjaxRequestObject.responseText);
}
else {
alert('failure');
}
}
else {
alert('failure');
}
}
};
AjaxRequestObject.send(FormDataToSend);
Dieser Code wurde nach einem Problem zur Verfügung gestellt hatte ich die Darin Dimitrov die Lösung bereitgestellt, so konnte ich die Datei-Eingänge von Ajax senden.
Irgendwelche Ideen, warum diese Anfrage nicht den Header für einen Ajax-Aufruf senden würde?
Super I nicht kannte. Direkt vor dem Senden habe ich Folgendes hinzugefügt: "AjaxRequestObject.setRequestHeader ('X-Requested-With', 'XMLHttpRequest');" und ich denke, es hat funktioniert. – eyeballpaul