1

WordPressプラグインでナンスを使おうとしています。ノンスを使いたいフォームがあります。

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');

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);
                    });

ナンスをjQueryに正しく投稿していますか?

PHPの場合:

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

助言がありますか?ナンスに関するすべてのコードを取り除くと、すべてが正常に機能します。なぜそれが機能しないのかについてのアイデアはありますか?または、どうすればデバッグできますか?ありがとうございました!

ありがとうございました。

4

1 に答える 1

5

間違っていることが2つあります。

jQuery postメソッドを介してデータを送信する場合、これまでのように1つのオブジェクト+1つのクエリ文字列を送信することはできません。代わりに、クエリ文字列形式またはオブジェクト形式のデータを送信する必要があります。簡単にするために、クエリ文字列形式を使用します。したがって、郵便番号は次のようになります。

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);
             });

これにより、パラメータmy_nonceでナンスが送信されます。これでサーバー側を置き換えることができます

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

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

jQuery.postwp_verfiy_nonceのドキュメントを見ると、より良い結果が得られます:)

于 2011-10-10T23:19:40.283 に答える