Ho una chiamata ajax in cui ho utilizzato jQuery.ajax() per effettuare una richiesta a un'azione mvc. Tutto ha funzionato bene. Tuttavia, a causa di alcuni moduli con un controllo file, l'ho modificato dall'utilizzo di jQuery.ajax() all'utilizzo di XMLHttpRequest per inviarlo utilizzando l'API file HTML5.XMLHttpRequest non aggiunge intestazione - "X-Requested-With: XMLHttpRequest"
Dopo aver apportato questa modifica, il metodo di azione MVC non lo vede più come una richiesta Ajax. Usando Fiddler2 ho notato che non aggiunge più alla richiesta "X-Requested-With: XMLHttpRequest" e presumo che questo sia il problema.
Il modulo che sto tentando di inviare non ha un input di file, solo normali caselle di testo ecc., Ma stavo cercando di mantenere il metodo generico per gestire entrambi. Quello che segue è il codice che sto usando per inviare la richiesta ajax:
// 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);
Questo codice è stato fornito a seguito di un problema che ho avuto che Darin Dimitrov ha fornito la soluzione per, così ho potuto inviare gli ingressi di file da ajax.
Qualche idea sul perché questa richiesta non invia l'intestazione per una chiamata Ajax?
Super non lo sapevo. Direttamente prima dell'invio, ho aggiunto quanto segue: "AjaxRequestObject.setRequestHeader ('X-Requested-With', 'XMLHttpRequest');" e penso che abbia funzionato – eyeballpaul