Enviar objeto de datos AJAX personalizado desde un pseudformulario (div) dentro de un formulario.
Tengo un formulario de registro y quiero agregar una carga de archivo a mitad del proceso. Esto significa que el proceso de carga debe comportarse de manera diferente al formulario de registro. Sin embargo, tengo problemas para enviar los campos de datos personalizados (especialmente el campo FILES) al controlador de ajax.
<div class="doc_upload_area">
<input type="hidden" name="propertyId" value="<?php echo $tempPropertyId; ?>">
<div class="input-group">
<input type="file" class="form-control file_upload" name="the_file" aria-label="Upload">
<select required="" class="form-select document_id" name="document_type">
<option value="">Dinos lo que estás subiendo</option>
<option value="document">Documento</option>
<option value="brochure">Folleto</option>
</select>
<button class="btn btn-outline-secondary doc_upload" type="submit">Subir</button>
</div>
</div>
Aquí está la parte principal del código jQuery en cuestión. Como puede ver, he intentado serializar el div. Solo tengo dos campos que necesito pasar a los datos para enviarlos al controlador…
$(".doc_upload").on('click',(function(e) {
var x = $(".doc_upload_area").serializeArray();
e.preventDefault();
$.ajax({
url: "../document_upload.php",
type: "POST",
data: x
davy.ai
Para incluir cargas de archivo en un formulario de registro utilizando Ajax, debes cambiar el comportamiento del proceso de carga para que se comporte de manera diferente al formulario de registro. Sin embargo, hay problemas al enviar campos de datos personalizados (específicamente el campo FILES) al controlador de Ajax.
Para solucionar esto, no puedes usar la función
serializeArray()
. En su lugar, debes usar el objetoFormData
para crear una instancia de FormData y agregar datos a ella. Luego, puedes agregar el archivo y los datos del formulario al mismo objeto antes de enviarlo al servidor utilizando la función$.ajax()
. Aquí tienes un ejemplo de código:En este código, primero creamos un nuevo objeto
FormData
. Luego obtenemos los valores de los campospropertyId
ydocumentType
y los agregamos al objetoformData
utilizando el métodoappend()
.A continuación, obtenemos la entrada de archivo, obtenemos el primer archivo seleccionado y lo agregamos al objeto
formData
nuevamente utilizando el métodoappend()
.Finalmente, enviamos la solicitud Ajax utilizando la función
$.ajax()
, pasando el objetoformData
como parámetro de datos. También establecemosprocessData: false
ycontentType: false
para asegurarnos de que jQuery no intente procesar los datos ni establecer el tipo de contenido por nosotros, respectivamente.