Los datos del formulario están vacíos al enviar el formulario mediante ajax usando jquery en WordPress

19 jul 2017, 14:34:14
Vistas: 40.3K
Votos: 2

Estoy enviando un formulario a través de ajax usando jquery en WordPress pero desafortunadamente obtengo el formulario vacío en la consola.

Aquí está mi código jquery -

function step1SaveData(){
    var formData = new FormData(jQuery('#tpform1')[1]);
    console.log(formData);
    jQuery.ajax({
        type:"POST",
        url:'http://lexem.in/wp-admin/admin-ajax.php',
        processData:false,
        contentType:false,
        data:{
            action:'tpartners',
            formdata:formData,
        },
        success:function(data){
            var insertedID = data.trim();
            if(insertedID!='fail'){
            }else{
                console.log('fail');
            }
        }

    });

}

Y aquí está mi código del archivo ajax -

add_action( 'wp_ajax_tpartners', 'save_update_data' );
add_action( 'wp_ajax_nopriv_tpartners', 'save_update_data' );

function save_update_data(){

    print_r($_POST);
    print_r($_FILES);

} 

El archivo Ajax devuelve 0.

Por favor, ayúdenme a resolverlo.

Gracias de antemano.

8
Comentarios

@GrayCarry ahora dice que site_url no está definido.

Vipin Vipin
19 jul 2017 15:02:52

site_url() es PHP, esto está en el código Javascript si estoy leyendo bien la pregunta

mrben522 mrben522
19 jul 2017 15:30:55

Necesitaremos ver tu HTML para diagnosticar esto, si tu console.log está devolviendo null entonces tienes un error en cómo estás capturando los datos del formulario. ¿Puedo preguntar por qué estás usando FormData en lugar de .serialize()?

mrben522 mrben522
19 jul 2017 15:34:33

@mrben522 Sí, ese es código de jQuery.

Vipin Vipin
19 jul 2017 15:35:26

@mrben522 en realidad tengo que publicar una imagen también, por eso estoy usando la función FormData().

Vipin Vipin
19 jul 2017 15:36:17

muéstranos tu HTML

mrben522 mrben522
19 jul 2017 15:41:07

@mrben522, Sí, ahora tengo los datos (13) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] en la consola pero en php POST sigue vacío.

Vipin Vipin
19 jul 2017 15:46:18

@mrben522 el HTML es muy grande, ¿está bien ponerlo aquí? por favor.

Vipin Vipin
19 jul 2017 15:47:50
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 1
6

Prueba usando .serialize() en lugar de FormData

 function step1SaveData(){
    var formData = jQuery('#tpform1').serialize();
    console.log(formData);
    jQuery.ajax({
        type:"POST",
        url:'http://lexem.in/wp-admin/admin-ajax.php',
        data:{
            action:'tpartners',
            formdata:formData,
        },
        success:function(data){
            var insertedID = data.trim();
            if(insertedID!='fail'){
            }else{
                console.log('falló');
            }
        }

    });

}

o usa .serializeArray() si prefieres tus datos en un array en lugar de una cadena.

EDITADO - según los comentarios, elimina processData:false y contentType:false de la llamada ajax

19 jul 2017 15:37:25
Comentarios

He utilizado la función .serialize() pero desafortunadamente no envía los datos de archivos.

Vipin Vipin
19 jul 2017 15:39:49

Vale, ahora estoy usando la función serializeArray() y veremos qué pasa... te actualizaré lo antes posible.

Vipin Vipin
19 jul 2017 15:40:47

Ahora tengo datos en la consola usando la función serializeArray() pero el POST sigue vacío, desafortunadamente.

Vipin Vipin
19 jul 2017 15:48:39

Entonces, finalmente el problema se resolvió siguiendo estos pasos - 1. Eliminar processData:false de la solicitud ajax 2. Eliminar contentType:false de la solicitud ajax 3. Usar la función serializeArray() en lugar de FormData().

Gracias por tu ayuda. Saludos

Vipin Vipin
19 jul 2017 15:58:54

@Vipin ¿podrías por favor editar esta respuesta o publicar tu propia respuesta con tu resultado? No entendí cómo reemplazar formdata por serializeArray.

Basti Basti
8 oct 2017 21:06:41

Esto no envía los archivos en el formulario.

Lifz Lifz
8 nov 2018 17:00:33
Mostrar los 1 comentarios restantes