WordPress Ajax returnează întotdeauna o eroare 404

19 aug. 2013, 06:36:08
Vizualizări: 28.2K
Voturi: 3

Am preluat acest cod dintr-un tutorial. Nu reușesc să îl fac să funcționeze.

HTML (home.php)

    <form name="myform" id="myform" action="" method="POST">  
      <!-- Câmpul pentru Nume -->
      <label for="name" id="name_label">Nume</label>  
      <input type="text" name="name" id="name" size="30" value=""/>  
      <br>
      <!-- Câmpul pentru Email -->
      <label for="email" id="email_label">Email</label>  
      <input type="text" name="email" id="email" size="30" value=""/> 
      <br>
      <!-- Butonul de Trimitere -->
      <input type="submit" name="submit" value="Trimite"> 
   </form>
   <!-- Aici vom afișa rezultatele din process.php -->
   <div id="results"><div>

PHP (functions.php)

    function myform(){
       echo "Formular trimis cu succes: <br>Numele tău este <b>".$_POST['name']."</b> și emailul tău este <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: "Te rugăm să ne spui cine ești.",
            email: "Un email valid ne va ajuta să luăm legătura cu tine.",
        },
        submitHandler: function(form) {
            // executăm alte acțiuni pentru un formular valid
            jQuery.post('/wp-admin/admin-ajax.php', jQuery("#myform").serialize(), function(data) {
                jQuery('#results').html(data);
            });
        }
    });
});
</script>
2
Comentarii

Care este întrebarea? "Nu reușesc să fac să funcționeze" nu prea sună ca un tichet de problemă.

s_ha_dum s_ha_dum
19 aug. 2013 07:31:53

Practic, întreb de ce primesc eroarea 404? Ce fac greșit?

sublimelaconic sublimelaconic
19 aug. 2013 08:24:04
Toate răspunsurile la întrebare 4
3

A fost foarte frustrant să descoper acest lucru. Am petrecut ore întregi pe această problemă și am descoperit că problema ta este în acest câmp de introducere:

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

Încearcă să schimbi numele câmpului în orice altceva decât "name", de exemplu:

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

Da, există o listă de numere rezervate, iar dacă folosești unul în formularele tale, WordPress va da eroare, de obicei fără un mesaj util.

Doug Cassidy Doug Cassidy
18 oct. 2015 21:20:57

De necrezut. WordPress nu acceptă termenul folosit ca nume pentru o proprietate din corpul POST, așa că aruncă o eroare 404?!?!?! Atât de stupid.

AJB AJB
31 dec. 2018 23:42:27

Iată-le: https://codex.wordpress.org/Reserved_Terms

kjones kjones
30 ian. 2019 21:01:47
0

Dacă primiți o eroare 404 la cererea AJAX, atunci calea este greșită. Folosiți admin_url pentru a construi calea în loc să o hard-code-uiți.

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

Este mai bine să afișați adresa URL a administrației într-o variabilă Javascript prin intermediul wp_localize_script decât să o tipăriți direct în șablon. De exemplu:

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

De obicei, este mai bine să înregistrați și să încărcați scripturile decât să le scrieți direct în șabloane, mai ales în header.php. Așa cum este scris acum, scriptul dvs. Javascript se încarcă pe fiecare pagină și este puțin probabil să fie necesar pe toate paginile.

19 aug. 2013 16:42:47
1

În primul rând, asigură-te că toate datele sunt sanitizate.

În al doilea rând, aș face mai degrabă astfel:

jQuery(function($){
    $("#myform").validate({
        debug: false,
        rules: {
            name: "required",
            email: {
                required: true,
                email: true
            }
        },
        messages: {
            name: "Te rugăm să ne spui cine ești.",
            email: "O adresă de email validă ne va ajuta să luăm legătura cu tine.",
        },
        submitHandler: function(form) {
            // alte acțiuni pentru un formular valid
            // dacă nu ai scriptul localizat și îl vei adăuga în header.php (nu e o practică bună)
            $.post(
               '<?php echo admin_url('admin-ajax.php'); ?>',
               form.serialize(),
               function(data){
                   // doar pentru a verifica datele
                   console.log(data);
                   $('#results').html(data);
               }

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

Și în fișierul tău php (functions.php):

Asigură-te că adaugi die(); la sfârșitul funcțiilor.

function myform(){
       echo "Formular trimis cu succes: <br>Numele tău este <b>".$_POST['name']."</b> iar adresa ta de email este <b>".$_POST['email']."</b><br>"; 
       die();
    }
    add_action('wp_ajax_myform', 'myform');
    add_action('wp_ajax_nopriv_myform', 'myform');
19 aug. 2013 07:23:44
Comentarii

Se pare că există o eroare în această linie '<?php echo admin_url('admin-ajax.php); ?>', așa că am schimbat-o în '<?php echo admin_url('admin-ajax.php'); ?>', dar tot primesc o eroare 404. Aveți vreo idee de ce primesc eroarea 404?

sublimelaconic sublimelaconic
19 aug. 2013 08:27:06
0

Ai uitat să adaugi acțiunea (wp) în formular sau în funcția jQuery ajax.

Adaugă <input type="hidden" name="action" value="myform"> în formular și se va conecta la funcțiile tale ajax.

23 dec. 2013 14:58:02