WordPress Ajax restituisce sempre un errore 404

19 ago 2013, 06:36:08
Visualizzazioni: 28.2K
Voti: 3

Ho appena preso questo codice da un tutorial. Non riesco a farlo funzionare.

HTML (home.php)

    <form name="myform" id="myform" action="" method="POST">  
      <!-- Campo del modulo Nome -->
      <label for="name" id="name_label">Nome</label>  
      <input type="text" name="name" id="name" size="30" value=""/>  
      <br>
      <!-- Campo del modulo Email -->
      <label for="email" id="email_label">Email</label>  
      <input type="text" name="email" id="email" size="30" value=""/> 
      <br>
      <!-- Pulsante Invia -->
      <input type="submit" name="submit" value="Invia"> 
   </form>
   <!-- Qui mostreremo i risultati da process.php -->
   <div id="results"><div>

PHP (functions.php)

    function myform(){
       echo "Modulo inviato con successo: <br>Il tuo nome è <b>".$_POST['name']."</b> e la tua email è <b>".$_POST['email']."</b><br>"; 
    }
    add_action('wp_ajax_myform', 'myform');
    add_action('wp_ajax_nopriv_myform', 'myform');

Javascript (header.php)

    <script type="text/javascript">
jQuery(document).ready(function(){
    jQuery("#myform").validate({
        debug: false,
        rules: {
            name: "required",
            email: {
                required: true,
                email: true
            }
        },
        messages: {
            name: "Per favore, facci sapere chi sei.",
            email: "Un'email valida ci aiuterà a metterci in contatto con te.",
        },
        submitHandler: function(form) {
            // esegue altre operazioni per un modulo valido
            jQuery.post('/wp-admin/admin-ajax.php', jQuery("#myform").serialize(), function(data) {
                jQuery('#results').html(data);
            });
        }
    });
});
</script>
2
Commenti

Qual è la domanda? "Non riesco a farlo funzionare" non è un buon ticket di supporto.

s_ha_dum s_ha_dum
19 ago 2013 07:31:53

Beh, fondamentalmente sto chiedendo perché ricevo un errore 404? Cosa sto sbagliando?

sublimelaconic sublimelaconic
19 ago 2013 08:24:04
Tutte le risposte alla domanda 4
3

È stato molto frustrante capirlo. Ho passato ore su questo problema e ho scoperto che il tuo problema è in questo input:

<input type="text" name="name" id="name" size="30" value=""/> 

Prova a cambiare il nome del campo di input con qualsiasi cosa tranne "name", ad esempio:

<input type="text" name="user_name" id="name" size="30" value=""/> 
11 lug 2015 04:55:16
Commenti

Sì, esiste una lista di nomi riservati, e se ne usi uno nei tuoi form, WP si bloccherà, solitamente senza un buon messaggio di errore.

Doug Cassidy Doug Cassidy
18 ott 2015 21:20:57

Incredibile. WP non accetta il termine usato come nome per una proprietà nel body della POST e restituisce un 404?!?!?! Così stupido.

AJB AJB
31 dic 2018 23:42:27

Eccoli qui: https://codex.wordpress.org/Reserved_Terms

kjones kjones
30 gen 2019 21:01:47
0

Se stai ricevendo un errore 404 sulla richiesta AJAX, allora il tuo percorso è sbagliato. Utilizza admin_url per costruire il percorso invece di inserirlo manualmente.

jQuery.post(<?php admin_url('admin-ajax.php') ?>, // ...

Probabilmente è meglio stampare l'URL di amministrazione in una variabile Javascript tramite wp_localize_script piuttosto che stamparlo direttamente nel template. Ad esempio:

wp_enqueue_script('jquery');   
wp_localize_script( 'jquery', 'my_ajax_vars', array(
    'ajaxurl'       => admin_url( 'admin-ajax.php' )
);

Di solito è preferibile registrare e accodare gli script invece di scriverli direttamente nei template, specialmente in header.php. Così com'è, il tuo javascript viene caricato in ogni pagina e dubito che sia necessario su tutte le pagine.

19 ago 2013 16:42:47
1

Prima di tutto, sanifica tutti i tuoi dati.

In secondo luogo, preferirei fare così:

jQuery(function($){
    $("#myform").validate({
        debug: false,
        rules: {
            name: "required",
            email: {
                required: true,
                email: true
            }
        },
        messages: {
            name: "Per favore facci sapere chi sei.",
            email: "Un'email valida ci aiuterà a metterci in contatto con te.",
        },
        submitHandler: function(form) {
            // fai altre operazioni per un form valido
            // se non hai localizzato il tuo script e lo aggiungerai in header.php (non una buona pratica)
            $.post(
               '<?php echo admin_url('admin-ajax.php); ?>',
               form.serialize(),
               function(data){
                   // solo per controllare i dati
                   console.log(data);
                   $('#results').html(data);
               }

            });
            jQuery.post('/wp-admin/admin-ajax.php', jQuery("#myform").serialize(), function(data) {
                jQuery('#results').html(data);
            });
        }
    });
});

E nel tuo file php (functions.php):

Assicurati di aggiungere die(); alla fine delle funzioni.

function myform(){
       echo "Form inviato con successo: <br>Il tuo nome è <b>".$_POST['name']."</b> e la tua email è <b>".$_POST['email']."</b><br>"; 
       die();
    }
    add_action('wp_ajax_myform', 'myform');
    add_action('wp_ajax_nopriv_myform', 'myform');
19 ago 2013 07:23:44
Commenti

Sembra esserci un errore in questa riga '<?php echo admin_url('admin-ajax.php); ?>', quindi l'ho modificata in '<?php echo admin_url('admin-ajax.php'); ?>', ma continuo a ricevere un errore 404. Hai idea del perché sto ricevendo un 404?

sublimelaconic sublimelaconic
19 ago 2013 08:27:06
0

Hai dimenticato di inserire la tua azione (wp) nel form o nella funzione jQuery ajax.

Aggiungi <input type="hidden" name="action" value="myform"> al form e si collegherà alle tue funzioni ajax.

23 dic 2013 14:58:02