I dati del form sono vuoti durante l'invio tramite ajax utilizzando jQuery in WordPress

19 lug 2017, 14:34:14
Visualizzazioni: 40.3K
Voti: 2

Sto inviando un form tramite ajax utilizzando jQuery in WordPress ma purtroppo ottengo il form vuoto nella console.

Ecco il mio codice 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('fallito');
            }
        }

    });

}

Ed ecco il codice del mio file 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);

} 

Il file ajax restituisce 0.

Vi prego di aiutarmi a capire quale sia il problema.

Grazie in anticipo.

8
Commenti

@GrayCarry ora dice che site_url non è definito.

Vipin Vipin
19 lug 2017 15:02:52

site_url() è PHP, questo è nel codice Javascript se ho capito bene la domanda

mrben522 mrben522
19 lug 2017 15:30:55

Avremo bisogno di vedere il tuo HTML per diagnosticare il problema, se il tuo console.log restituisce null allora hai commesso un errore nel modo in cui stai recuperando i dati del form. Posso chiederti perché stai usando FormData invece di .serialize()?

mrben522 mrben522
19 lug 2017 15:34:33

@mrben522 Sì, questo è codice jquery.

Vipin Vipin
19 lug 2017 15:35:26

@mrben522 in realtà devo pubblicare anche un'immagine ed è per questo che sto utilizzando la funzione FormData().

Vipin Vipin
19 lug 2017 15:36:17

mostraci il tuo HTML

mrben522 mrben522
19 lug 2017 15:41:07

@mrben522, Sì ora ho i dati (13) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] nella console ma in php POST è ancora vuoto.

Vipin Vipin
19 lug 2017 15:46:18

@mrben522 HTML è molto grande quindi va bene metterlo qui? per favore.

Vipin Vipin
19 lug 2017 15:47:50
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 1
6

Prova a usare .serialize() invece di 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('fail');
            }
        }

    });

}

oppure usa .serializeArray() se vuoi i tuoi dati in un array invece che in una stringa.

MODIFICA - dai commenti, rimuovi processData:false e contentType:false dalla chiamata ajax

19 lug 2017 15:37:25
Commenti

Ho utilizzato la funzione .serialize() ma sfortunatamente non invia i dati dei file.

Vipin Vipin
19 lug 2017 15:39:49

Ok, ora provo con la funzione serializeArray() e vediamo cosa succede... ti aggiorno al più presto.

Vipin Vipin
19 lug 2017 15:40:47

Ora ho i dati nella console usando la funzione serializeArray() ma il POST è ancora vuoto, purtroppo.

Vipin Vipin
19 lug 2017 15:48:39

Quindi, il problema è stato finalmente risolto seguendo questi passaggi - 1. Rimuovere processData:false dalla richiesta ajax 2. Rimuovere contentType:false dalla richiesta ajax 3. Utilizzare la funzione serializeArray() invece di FormData().

Grazie per l'assistenza. Saluti

Vipin Vipin
19 lug 2017 15:58:54

@Vipin potresti per favore modificare questa risposta o pubblicare la tua risposta con il tuo risultato? Non ho capito come sostituire formdata con serializeArray.

Basti Basti
8 ott 2017 21:06:41

Questo non invia i file presenti nel form.

Lifz Lifz
8 nov 2018 17:00:33
Mostra i restanti 1 commenti