Tengo una llamada ajax donde utilicé jQuery.ajax() para realizar una solicitud a una acción mvc. Todo esto funcionó bien. Sin embargo, debido a que algunas formas tienen un control de archivos, lo cambié de jQuery.ajax() a usar XMLHttpRequest para enviarlo usando la API de archivos HTML5.XMLHttpRequest no agrega el encabezado - "X-Requerido-Con: XMLHttpRequest"
Dado que hacer esto cambia el método de acción MVC ya no lo ve como una solicitud de AJAX. Utilizando Fiddler2 noté que ya no agrega el "X-Requerido-Con: XMLHttpRequest" a la solicitud y asumo que este es el problema.
El formulario que intento enviar no tiene entrada de archivo, solo cuadros de texto normales, etc., pero estaba tratando de mantener el método genérico para tratar con ambos. El siguiente es el código que estoy utilizando para enviar la petición 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);
Este código fue proporcionada después de un problema que tuve, que Darin Dimitrov proporciona la solución a, por lo que podría enviar las entradas del archivo de ajax.
¿Alguna idea de por qué esta solicitud no enviaría el encabezado para una llamada ajax?
Súper Yo no sabía eso. Justo antes del envío, agregué lo siguiente: "AjaxRequestObject.setRequestHeader ('X-Requested-With', 'XMLHttpRequest');" y creo que funcionó. – eyeballpaul