1

WP ajaxのドキュメントを何時間も見てきましたが、まだこれを理解できません。私はプラグインに取り組んでいます。これは、ページを更新せずにオプションを更新するためのものです。私は wp-load を介してそれを達成することができましたが、それは悪い習慣であり、正しく実行したいと考えています。

すべての作業が完了したら、javascript を別の .js ファイルに移動します。

すべてのコードが 1 つのページにまとめられています。ajax を介していくつかのオプションを更新しようとしていますが、機能していません。応答は成功したことを示していますが、current_form オプションは更新されていません。どんな助けでも大歓迎です。

コードは次のように更新されました。

wp_enqueue_script( 'AWNT_save_form_data', plugin_dir_url( __FILE__ ) . 'includes/save_form_data.js', array( 'jquery' ) );

wp_localize_script( 'AWNT_save_form_data', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request
    'ajaxurl'          => admin_url( 'admin-ajax.php' ),

    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    // so that you can check it later when an AJAX request is sent
    'postCommentNonce' => wp_create_nonce( 'myajax-post-comment-nonce' ),
    )
);

add_action('wp_ajax_AWNT_save', 'AWNT_save_callback');

function AWNT_save_callback() {
update_option('current_form', '5');
$nonce = $_POST['postCommentNonce'];
if ( ! wp_verify_nonce( $nonce, 'myajax-post-comment-nonce' ) )
    die ( 'Busted!');
update_option('current_form', 'foo');
echo get_option('current_form');
die();
}

JS ファイル (save_form_data.js):

 jQuery(document).ready(function($) {
$('#save').click(function() { 
        var data = {
            action: 'AWNT_save',
            postCommentNonce : MyAjax.postCommentNonce,
            form_name : $('#form_name').val(),
customC: $('#customC').is(":checked"),
no_throttle: $('#no_throttle').is(":checked"),
form_code : $('#form_code').val()};

        jQuery.post( MyAjax.ajaxurl, data, function(response) {
            alert('Response: ' + response);
        });
    });
});

スクリプトが追加されています。応答 0 のアラートを参照してください。ただし、update_option が呼び出されていないか、機能していません。current_form は同じままです。

4

3 に答える 3

0

http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/を読む必要があります

最初にjavascriptファイルを分離し、 wp_enqueue_scriptを使用して追加します。次に、wp_localize_scriptを使用して、nonceとajaxurlをjavascriptファイルに渡します。

function.phpで

wp_localize_script( 'your-js-file', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request
    'ajaxurl'          => admin_url( 'admin-ajax.php' ),

    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    // so that you can check it later when an AJAX request is sent
    'postCommentNonce' => wp_create_nonce( 'myajax-post-comment-nonce' ),
    )
);


// if both logged in and not logged in users can send this AJAX request,
// add both of these actions, otherwise add only the appropriate one
add_action( 'wp_ajax_AWNT_save', 'AWNT_save_callback' );
add_action('wp_ajax_nopriv_AWNT_save', 'AWNT_save_callback' );

function AWNT_save_callback() {

//CHeck  nonce FIRST HERE

$nonce = $_POST['postCommentNonce'];

// check to see if the submitted nonce matches with the
// generated nonce we created earlier
if ( ! wp_verify_nonce( $nonce, 'myajax-post-comment-nonce' ) )
    die ( 'Busted!')

update_option('current_form', 'foo');
echo get_option('current_form');

die();
}

javascriptファイルで

 jQuery(document).ready(function($) {
$('#save').click(function() { 
        var data = {
            action: 'AWNT_save',
            postCommentNonce : MyAjax.postCommentNonce,
            form_name : $('#form_name').val(),
customC: $('#customC').is(":checked"),
no_throttle: $('#no_throttle').is(":checked"),
form_code : $('#form_code').val()};

        jQuery.post( MyAjax.ajaxurl, data, function(response) {
            alert('Response: ' + response);
        });
    });
});
于 2012-08-07T16:52:51.207 に答える
0

私は簡単なテスト(粗いもの)を行いましたが、これは私にとっては機能するコードでした。

wp_enqueue_script( 'AWNT_save_form_data', get_stylesheet_directory_uri() . '/inc/save_form_data.js', array( 'jquery' ) );
wp_localize_script( 'AWNT_save_form_data', 'MyAjax', array(
    // URL to wp-admin/admin-ajax.php to process the request
    'ajaxurl'          => admin_url( 'admin-ajax.php' ),
    // generate a nonce with a unique ID "myajax-post-comment-nonce"
    // so that you can check it later when an AJAX request is sent
    'postCommentNonce' => wp_create_nonce( 'myajax-post-comment-nonce' ),
    )
);
add_action('wp_ajax_AWNT_save', 'AWNT_save_callback');
function AWNT_save_callback() {
    update_option('current_form', '5');
    $nonce = $_POST['postCommentNonce'];
    if ( ! wp_verify_nonce( $nonce, 'myajax-post-comment-nonce' ) )
        die ( 'Busted!');
    update_option('current_form', 'foo');
    echo get_option('current_form');
    die();
}
add_action( 'admin_menu', 'register_menu_pages', $priority = 10, $accepted_args = 1 );
function register_menu_pages() {
    add_menu_page('AWNT', 'awnt custom', 'manage_options', 'awntCustom', 'awnt_menu', 'dashicons-admin-site', 6 );
}
function awnt_menu () {
    ?>
    <form method="post">
        <input type="text" id="form_name" name="form_name">
        <input type="text" id="form_code" name="form_code">
        <input type="checkbox" id="customC" name="customC">
        <input type="checkbox" id="no_throttle" name="no_throttle">
        <input type="submit" name="save" value="Save" id="save">
    </form>
    <?php
}

Javascript コードは次のとおりです。

jQuery(document).ready(function($) {
    $('#save').on('click', function(e) {
        e.preventDefault(); 
        var data = {
            action: 'AWNT_save',
            postCommentNonce : MyAjax.postCommentNonce,
            form_name : $('#form_name').val(),
            customC: $('#customC').is(":checked"),
            no_throttle: $('#no_throttle').is(":checked"),
            form_code : $('#form_code').val()
        };
        jQuery.post( MyAjax.ajaxurl, data, function(response) {
            alert('Response: ' + response);
        });
    });
});

他にJavaScriptの競合がない限り、同じことがうまくいくはずです。

于 2018-05-07T23:11:05.830 に答える
-2

これは

add_action( 'wp_ajax_AWNT_save_callback', 'AWNT_save_callback' );
add_action('wp_ajax_nopriv_AWNT_save_callback', 'AWNT_save_callback' );

つまり、フック名が間違っています。

于 2013-12-03T11:37:37.740 に答える