WordPress передает значение AJAX на определенную страницу с помощью WordPress

Я хотел бы передать переменную на определенную страницу. Я нашел простой пример, объясняющий, как использовать Ajax с WordPress.

JavaScript:

jQuery(document).ready(function($) {

// We'll pass this variable to the PHP function example_ajax_request
var fruit = 'Banana';

// This does the ajax request
$.ajax({
    url: ajaxurl,
    data: {
        'action':'example_ajax_request',
        'fruit' : fruit
    },
    success:function(data) {
        // This outputs the result of the ajax request
        console.log(data);
    },
    error: function(errorThrown){
        console.log(errorThrown);
    }
});  

});

Кусок PHP для вставки вfunctions.php

function example_ajax_request() {

// The $_REQUEST contains all the data sent via ajax
if ( isset($_REQUEST) ) {

    $fruit = $_REQUEST['fruit'];

    // Let's take the data that was sent and do something with it
    if ( $fruit == 'Banana' ) {
        $fruit = 'Apple';
    }

    // Now we'll return it to the javascript function
    // Anything outputted will be returned in the response
    echo $fruit;

    // If you're debugging, it might be useful to see what was sent in the $_REQUEST
    // print_r($_REQUEST);

}

// Always die in functions echoing ajax content
  die();
 }

add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );


   wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajax_url' =>   admin_url( 'admin-ajax.php' ) ) );

К сожалению, я не могу передать переменную. Я проверил код и получаю эту ошибку:

Error: ajax_object is not defined

Может быть, вы знаете другой способ получить тот же результат?

 thefallen07 июн. 2016 г., 14:15
wp_localize_script ожидал иметь переменную с именемajax_objectИтак, можете ли вы попытаться прокомментировать это и посмотреть, работает ли он, чтобы вы знали, что там появляется ошибка?
 Daniel07 июн. 2016 г., 14:47
Привет, LoicTheAtzec Я не совсем понял твой пример. Могу ли я попросить вас написать свое предложение с помощью цитаты.

Ответы на вопрос(3)

за исключением того, что вы должны добавить ajax_object.ajax_url вместо ajaxurl в url: параметр функции $ .ajax как

jQuery(document).ready(function($) {

// We'll pass this variable to the PHP function example_ajax_request
var fruit = 'Banana';

// This does the ajax request
$.ajax({
    url: **ajax_object.ajax_url**,
    data: {
        'action':'example_ajax_request',
        'fruit' : fruit
    },
    success:function(data) {
        // This outputs the result of the ajax request
        console.log(data);
    },
    error: function(errorThrown){
        console.log(errorThrown);
    }
});  

});

скопируйте и вставьте приведенный выше скрипт вместо вашей функции $ .ajax. Если вы хотите увидеть, что такое ajax_object.ajax_url, то предупредите его, вставив код, и он сообщит путь к вашему файлу администратора ajax, который необходим для использования ajax в wordpress.

wp_localize_script неправильно. В коде PHP удалитеwp_localize_script линия.

При желании вы можете (и должны) добавить следующее

// this line is for users who are not logged in
add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' );
Решение Вопроса

В моем комментарии я имею в виду, что вам нужно использовать его таким образом, используя'ajax-script' в обоих:

add_action('wp_enqueue_scripts', 'add_js_scripts'); 
add_js_scripts(){
    wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/script.js', array('jquery'), '1.0', true );
    wp_localize_script( 'ajax-script', 'ajax_object', array( 'ajaxurl' =>   admin_url( 'admin-ajax.php' ) ) );
}

Изменено$_REQUEST в$_POST:

function example_ajax_request() {

    // The $_REQUEST contains all the data sent via ajax
    if ( isset($_POST) ) {

        $fruit = $_POST['fruit'];

        // Let's take the data that was sent and do something with it
        if ( $fruit == 'Banana' ) {
            $fruit = 'Apple';
        }

        // Now we'll return it to the javascript function
        // Anything outputted will be returned in the response
        echo $fruit;

        // If you're debugging, it might be useful to see what was sent in the $_POST
        // print_r($_POST);

    }

    // Always die in functions echoing ajax content
      die();

 }

добавленнойadd_action( 'wp_ajax_nopriv_ … ):

add_action( 'wp_ajax_nopriv_example_ajax_request', 'example_ajax_request' ); // <= this one
add_action( 'wp_ajax_example_ajax_request', 'example_ajax_request' );

Для вашего скрипта jQueryscript.js файл, есть 2 важные упущенные мелочи:

jQuery(document).ready(function($) {

    /* We'll pass this variable to the PHP function example_ajax_request */
    var fruit = 'Banana';

    /* This does the ajax request */
    $.ajax({
        url: ajax_object.ajaxurl, /* <====== missing here */
        type : 'post', /*    <========== and missing here */
        data: {
            'action':'example_ajax_request',
            'fruit' : fruit
        },
        success:function(data) {
            /* This outputs the result of the ajax request */
            console.log(data);
        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });  

});

Это должно работать сейчас ...

Рекомендации:

Использование AJAX с PHP на вашем сайте WordPress без плагина

Как использовать Ajax с вашим плагином или темой WordPress?

Ваш ответ на вопрос