Datele formularului sunt goale la trimiterea prin ajax folosind jQuery în WordPress

19 iul. 2017, 14:34:14
Vizualizări: 40.3K
Voturi: 2

Trimit un formular prin ajax folosind jquery în WordPress dar din păcate primesc formularul gol în console.

Aici este codul meu 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');
            }
        }

    });

}

Și aici este codul fișierului 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);

} 

Fișierul Ajax returnează 0.

Vă rog să mă ajutați să rezolv această problemă.

Mulțumesc anticipat.

8
Comentarii

@GrayCarry acum spune că site_url nu este definit.

Vipin Vipin
19 iul. 2017 15:02:52

site_url() este PHP, acesta este în codul Javascript dacă înțeleg corect întrebarea

mrben522 mrben522
19 iul. 2017 15:30:55

Va trebui să vedem HTML-ul tău pentru a diagnostica problema, dacă console.log returnează null atunci ai o greșeală în modul în care preiei datele din formular. Pot întreba de ce folosești FormData în loc de .serialize()?

mrben522 mrben522
19 iul. 2017 15:34:33

@mrben522 Da, acesta este cod jQuery.

Vipin Vipin
19 iul. 2017 15:35:26

@mrben522 de fapt trebuie să postez și o imagine, de aceea folosesc funcția FormData().

Vipin Vipin
19 iul. 2017 15:36:17

arată-ne codul tău HTML

mrben522 mrben522
19 iul. 2017 15:41:07

@mrben522, Da, acum am date (13) [Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] în consolă dar în php POST este încă gol.

Vipin Vipin
19 iul. 2017 15:46:18

@mrben522 HTML-ul este foarte mare, este în regulă să-l pun aici? te rog.

Vipin Vipin
19 iul. 2017 15:47:50
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 1
6

Încearcă să folosești .serialize() în loc 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('fail');
            }
        }

    });

}

sau folosește .serializeArray() dacă vrei ca datele tale să fie într-un array în loc de un string.

EDIT - conform comentariilor, elimină processData:false și contentType:false din apelul ajax

19 iul. 2017 15:37:25
Comentarii

Am folosit funcția .serialize(), dar din păcate nu trimite datele din fișiere.

Vipin Vipin
19 iul. 2017 15:39:49

OK, acum folosesc funcția serializeArray() și să vedem ce se întâmplă... vă voi actualiza cât de repede posibil.

Vipin Vipin
19 iul. 2017 15:40:47

Acum am date în consolă folosind funcția serializeArray(), dar POST este încă gol, din păcate.

Vipin Vipin
19 iul. 2017 15:48:39

Deci, în final problema a fost rezolvată urmând acești pași - 1. Elimină processData:false din cererea ajax 2. Elimină contentType:false din cererea ajax 3. Folosește funcția serializeArray() în loc de FormData().

Mulțumesc pentru ajutor. Noroc

Vipin Vipin
19 iul. 2017 15:58:54

@Vipin poți, te rog, să editezi acest răspuns sau să postezi propriul tău răspuns cu rezultatul tău? Nu am înțeles cum să înlocuiesc formdata cu serializeArray.

Basti Basti
8 oct. 2017 21:06:41

Aceasta nu postează fișierele din formular.

Lifz Lifz
8 nov. 2018 17:00:33
Arată celelalte 1 comentarii