web-dev-qa-db-fra.com

Code retour Ajax 400

Je n'ai jamais utilisé ajax dans wordpress auparavant et j'essaie de faire une simple requête en ajax en suivant des didacticiels vidéo sur youtube, mais le message d'erreur suivant est toujours renvoyé: Impossible de charger la ressource: le serveur a répondu avec un statut de 400 (requête incorrecte)

Mon javascript (à l'intérieur de mon propre fichier de modèle):

jQuery.ajax({
                url: ajaxurl,
                type: "POST",
                dataType: 'json',
                data: {
                    action: 'my_action'
                },

                success: function ( response ) {
                    console.log("success");
                    alert("success");   
                },
                error: function( error ){
                    console.log("error");
                    alert("error");
                }
            });

mon fichier functions.php:

<?php



add_action('wp_ajax_my_action', 'insertEmail');
add_action('wp_ajax_nopriv_my_action', 'insertEmail');

function insertEmail(){
  echo "<script> alert('functions fil'); </script>"
  die();
}

?>
1
Svante

Voici un extrait de base que j'utilise pour AJAX soumis dans Wordpress, il pourrait vous aider:

<?php
if (isset($_POST['my_theme_ajax_submit']))
    if ( wp_verify_nonce( $_POST['nonce'], 'my_theme_ajax_submit' ) )
        my_theme_ajax_submit(); 

function my_theme_ajax_submit() {
    // do something
    // some php code that fires from AJAX click of #fire
    wp_mail( '[email protected]', 'my_theme_ajax_submit() fired', time());
    wp_die();
}
?>

<button id='fire'>Fire Something</button>

<script>
    jQuery('#fire').click(function(){
        jQuery.ajax({
            type: 'post',
            data: { 
                "my_theme_ajax_submit": "now",
                "nonce" : "<?php echo wp_create_nonce( 'my_theme_ajax_submit' ); ?>"
            },
            success: function(response) { 
                jQuery('#fire').text("Somthing Done!");
            },
            error: function(response) { 
                jQuery('#fire').text("...error!");
            },
        });
    });
</script>

Cela peut être mieux construit - logeant les scripts dans wp_enque_script() , ayant la condition my_theme_ajax_submit() check/tir à un point d'ancrage tel que init (au lieu d'un modèle), ou en utilisant bon wp_ajax_(action) crochets (ne semblent jamais fonctionner pour moi) - mais cela devrait donner une idée.

2
David Sword