2016-06-07 3 views
2

Я хотел бы передать переменную на определенную страницу. Я нашел простой пример, объясняющий, как использовать ajax с wordpress.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 

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

+0

** wp_localize_script ** было бы ожидать, чтобы иметь переменную с именем ** ajax_object **, так что вы можете попытаться прокомментировать это и посмотреть, работает ли он, чтобы вы знали, что там появляется ошибка? – TheFallen

+0

Привет, LoicTheAtzec Я не совсем понял ваш пример. Могу я попросить вас написать свое предложение, используя blockquote. – Daniel

ответ

5

Вы очень близки, но есть некоторые мелочи, отсутствуют ...

Что я имею в виду мой комментарий, что вам нужно использовать его таким образом, используя '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'); 

Для файла JQuery скрипт script.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); 
     } 
    }); 

}); 

Это должно работать ...

Ссылки:

0

Вы используете 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'); 
0

Все правильно, за исключением вы должны добавить 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 затем предупреждение это inisde ваш код и он сообщит путь к админ АЯКС файл , который необходим для использования Ajax в WordPress