Con jQuery para enviar formularios sencillos basta con el siguiente código:
$(document).ready(function() {
$("body").on("submit", "form", function( event ) {
$(this).replaceWith('Pensando...');
event.preventDefault();
var type = "POST";
var url = $(this, "form").prop("action");
var cadena = $(this, "form").serialize();
alert("Cadena: " + cadena);
$.ajax({
type: type,
url: url,
data: cadena,
success: function(data) {
if (data) {
//alert(data);
$(".section").html(data);
return;
}
else {
//alert(data);
alert("Data no tiene valor");
}
}
});
});
});
Pero cuando el formulario contiene un archivo o imagen, esto no sirve, buscando por Internet encontré el uso de FormData, para el envió de archivos mediante AJAX, lo intento aplicar, pero no funciona:
$(document).ready(function() {
$("body").on("submit", "form", function( event ) {
$(this).replaceWith('Pensando...');
event.preventDefault();
var url = $(this, "form").prop("action");
var fd = new FormData($(this, "form"));
var tipo = "POST";
alert(JSON.stringify(fd));
$.ajax({
url: url,
data: fd,
type: tipo,
success: function(data) {
if (data) {
$(".section").html(data);
return;
}
else {
alert("Data no tiene valor");
}
}
});
});
});
El alert que debería mostrar la cadena, aparece vacía.
.section no es más que una clase de <section> en el index, donde se cargar el formulario y donde debería redirigirse el resultado.