2011-10-10 3 views
0

J'essaie d'utiliser un nonce dans un plugin WordPress. J'ai un formulaire que je veux utiliser le nonce.Utilisation de Nonce avec Ajax dans WordPress Plugin

en php:

function csf_enqueue() { 

//I have other scripts enqueued in htis function 
wp_enqueue_script('my-ajax-handle', plugin_dir_url(__FILE__).'file-path', array('jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'google-maps')); 

$data = array(
    'ajax_url' => admin_url('admin-ajax.php'), 
    'my_nonce' => wp_create_nonce('myajax-nonce') 
); 

wp_localize_script('my-ajax-handle', 'the_ajax_script', $data); 

} 

add_action('wp_enqueue_scripts', 'csf_enqueue'); 
add_action('wp_ajax_the_ajax_hook', 'the_action_function'); 
add_action('wp_ajax_nopriv_the_ajax_hook', 'the_action_function'); 

Dans le fichier jQuery:

jQuery.post(the_ajax_script.ajaxurl, {my_nonce : the_ajax_script.my_nonce}, jQuery("#theForm").serialize() + "&maxLat="+ csf_dcscore_crime_map_bounds[0] + "&maxLong="+ csf_dcscore_crime_map_bounds[1] + "&minLat="+ csf_dcscore_crime_map_bounds[2] + "&minLong="+ csf_dcscore_crime_map_bounds[3], 
        function(response_from_the_action_function){ 
         jQuery("#response_area").html(response_from_the_action_function); 
        }); 

Suis-je correctement l'affichage du nonce dans le jQuery?

en php:

function the_action_function() { 
    if(! wp_verfiy_nonce($nonce, 'myajax-nonce')) die ('Busted!'); 
//function continues 

Toutes les suggestions? Si je retire tout le code concernant le nonce, tout fonctionne bien. Des idées sur pourquoi ça ne marche pas? Ou comment puis-je le déboguer? Je vous remercie!

Merci.

Répondre

4

Il y a deux choses qui ne vont pas.

En envoyant des données via la méthode jQuery, vous ne pouvez pas envoyer un objet + une chaîne de requête comme vous l'avez fait. Au lieu de cela, vous devrez envoyer le format de chaîne de requête ou les données de format d'objet. Pour faciliter votre cas, j'irai avec le format de chaîne de requête. donc le code postal devrait ressembler à ceci

jQuery.post(the_ajax_script.ajaxurl, 
      jQuery("#theForm").serialize() + 
        "&maxLat="+ csf_dcscore_crime_map_bounds[0] + 
        "&maxLong="+ csf_dcscore_crime_map_bounds[1] + 
        "&minLat="+ csf_dcscore_crime_map_bounds[2] + 
        "&minLong="+ csf_dcscore_crime_map_bounds[3] + 
        "&my_nonce="+ the_ajax_script.my_nonce, 
      function(response_from_the_action_function) { 
       jQuery("#response_area") 
        .html(response_from_the_action_function); 
      }); 

Cela enverra le nonce dans le paramètre my_nonce. Maintenant, côté serveur, vous pouvez remplacer

if(! wp_verify_nonce($nonce, 'myajax-nonce')) die ('Busted!'); 

avec

if(! wp_verify_nonce($_POST['my_nonce'],'myajax-nonce')) die ('Busted!'); 

Un regard sur la documentation de jQuery.post et wp_verfiy_nonce vous aidera à mieux :)

+0

Salut sbrajesh, Je vous remercie beaucoup pour votre aide. J'ai apporté les modifications au code que vous avez suggéré. J'ai également supprimé le trait de soulignement dans 'ajaxurl'. Malheureusement, je reçois "Erreur fatale: Appel à la fonction indéfinie wp_verfiy_nonce()". On dirait que la fonction n'est pas chargée à temps pour une raison quelconque. Des idées? Je vous remercie ! – Laxmidi

+0

J'ai aussi eu une faute d'orthographe dans wp_verify_nonce. Mauvaise frappe. Je vous remercie! – Laxmidi

+0

Etes-vous sûr que cela fonctionne? Si elle ne changement '$ data = array ( 'ajax_url' => admin_url ('admin-ajax.php'), 'my_nonce' => wp_create_nonce ('myajax-nonce') );' à '$ data = array ( 'ajaxurl' => admin_url ('admin-ajax.php'), 'my_nonce' => wp_create_nonce ('myajax-nonce') ); ' ou de remplacer ajaxurl dans mon code avec ajax_url comme vous avez dans les données – sbrajesh

Questions connexes