$.ajax({
type: "POST",
dataType: "text",
url: ajaxurl,
data: {
action: "more_news",
nonce: nonce,
offset: offset
},
success : function(data, textStatus, jqXHR){
console.log( nonce );
console.log( data );
console.log( textStatus );
}
});
このAJAX request nonceをローカルでチェックすることは完全に機能します。以下に見られるように、私のコンソールは私の一回だけ、「素晴らしい」、そして「成功」を表示します。
9a91a5fdca
Awesome
success
私のサーバーでは、私のコンソールは私の一度だけ二倍を印刷し(それで私に彼らが全く同じであることを証明する)、それから成功します。
e2ca4eca80
e2ca4eca80
success
控えめに言っても…混乱しています…これはどのように可能ですか?そしてどのように私はそれを解決するのですか?
add_action( 'wp_ajax_more_news', 'more_news' );
add_action( 'wp_ajax_nopriv_more_news', 'more_news' );
function more_news(){
if ( !wp_verify_nonce($_POST['nonce'], 'more_news_nonce') ){
exit($_POST['nonce']);
}
echo 'Awesome';
die();
}
wp_verify_nonce()
の2番目のパラメータはアクションです。その部分はあなたの質問にはありませんが、私はそれが以下のように呼ばれるべきであると思います:
if ( !wp_verify_nonce($_POST['nonce'], $_POST['action']) ){
そのはず、
data: {
action: "more_news",
nonce: <?php echo wp_create_nonce( 'saiful_create_nonce' ); ?>,
offset: offset
},
とwp関数
function more_news(){
if ( ! check_ajax_referer( 'saiful_create_nonce', 'nonce' ) ){
return false;
}
echo 'Awesome';
die();
}
アクションはあなたが送ったものと同じではありませんか?
data: {
action: "more_news",
...
function more_news(){
if ( !wp_verify_nonce($_POST['nonce'], 'more_news_nonce') ){
....
私はそれがあるべきだと思います
function more_news(){
if ( !wp_verify_nonce($_POST['nonce'], 'more_news') ){
....