Как вызвать ajax в файле плагина

19 июл. 2014 г., 08:29:51
Просмотры: 13.5K
Голосов: 0

Я совсем новичок в работе с ajax в wordpress. Здесь я получаю значение выбранной опции в var test с помощью функции ниже. Когда я вывожу его через alert, оно показывает правильное значение.

Это значение var test я хочу отправить с помощью ajax и получить его в PHP переменной.

Мне нужно вызвать ajax и получить значение скриптовой переменной var test в php в файле плагина, где у меня есть обе функции и select box.

JQuery Функция.

jQuery("#time_slot").change(function()
{

var test= time_slot.value;
alert(test);

});

Select Box

<select name="time_slot" id="time_slot" class="time_slot">
<option value="">Выберите время</option>
<option value="1:00 - 3:00">01:00 AM-03:00 AM</option>
<option value="3:00 - 5:00">03:00 AM-05:00 AM</option>
</select>
0
Все ответы на вопрос 5
1

Используйте встроенные AJAX-действия WordPress:

Ваш jQuery-код будет выглядеть так:

$('#ajax_form').bind('submit', function() {
    var form = $('#ajax_form');
    var data = form.serialize();
    data.action = 'MyPlugin_GetVars'
    $.post('/wp-admin/admin-ajax.php', data, function(response) {
        alert(response);           
    });
return false; 

Код вашего плагина может выглядеть примерно так:

add_action("wp_ajax_MyPlugin_GetVars", "MyPlugin_GetVars");
add_action("wp_ajax_nopriv_MyPlugin_GetVars", "MyPlugin_GetVars");

function MyPlugin_GetVars(){
    global $wpdb;
    // используйте $wpdb для вставки данных

    // Выполняйте AJAX-действия здесь
    // Вы можете использовать include('/wp-content/plugins/test/getvars.php'), но лучше
    // избегать этого и перенести код прямо в эту функцию
}

Для получения дополнительной информации посетите AJAX в плагинах

19 июл. 2014 г. 08:40:38
Комментарии

можете ли вы рассказать мне структуру файлов в соответствии с кодом вопроса

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 08:59:35
14

пожалуйста, посмотрите ниже, это может вам помочь. Вот ваш код на PHP.

<?php

function ajax_enqueuescripts() {
    wp_enqueue_script('ajaxloadpost', plugins_url().'/your-plugin-name/js/my-ajax.js', array('jquery'));
    wp_localize_script( 'ajaxloadpost', 'ajax_postajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}

add_action('wp_enqueue_scripts', ajax_enqueuescripts);

add_action('wp_ajax_nopriv_ajax_ajaxhandler', 'my_action_callback' );
add_action('wp_ajax_ajax_ajaxhandler', 'my_action_callback' );

function my_action_callback(){  
    print_r($_GET);
    die;
}

А вот ваш код на JS. Вам нужно создать новый JS-файл и поместить в него следующий код.

jQuery(document).ready(function(){
 jQuery("#time_slot").change(function()
{

    var test= time_slot.value;

jQuery.ajax({
        type: 'GET',
        url: ajax_postajax.ajaxurl,
        data: {
            action: 'ajax_ajaxhandler',
            test : test   
        },
        success: function(data) {
            alert(data);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error");
        }
    });

    return false;
  });
});

Для более подробной информации вы можете проверить здесь

19 июл. 2014 г. 08:53:58
Комментарии

что делать с этим /your-plugin-name/js/my-ajax.js, можно подробнее

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 09:17:37

Вам нужно поместить ваш JS-код в my-ajax.js (название файла JS). Таким образом, "/your-plugin-name/js/my-ajax.js" будет путем к вашему JS-файлу.

Jigar Gorakhiya Jigar Gorakhiya
19 июл. 2014 г. 09:37:22

booking.php - это имя файла, где я получаю значение Jqery, которое нужно отправить через ajax-запрос. Где мне разместить эту функцию ajax_enqueuescripts() { и можно ли создать js-файл внутри файла booking.php, а также можно ли указать имя этого js-файла в

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 09:44:52

получаю ошибку parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION на этой строке с хуком add_action('wp_enqueue_scripts', ajax_enqueuescripts);

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 09:53:33

я сделал всё, что вы сказали в ответе, но получаю указанную выше ошибку

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 09:56:00

Я использую тот же код, что и выше в моём сообщении, но у меня всё работает нормально.

Jigar Gorakhiya Jigar Gorakhiya
19 июл. 2014 г. 10:07:09

когда я добавляю хуки действий вверху, ошибок не возникает, но ajax не вызывается, проверьте ссылку и пропустите опцию Gender, она не используется, выберите сразу календарь и затем время http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 10:20:21

могу ли я отправить вам файл плагина

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 10:23:36

я не увидел ваш комментарий, можете снова прокомментировать на сайте администратора

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 10:27:06

Привет, санджай, пожалуйста, возьми файл моего плагина отсюда

Jigar Gorakhiya Jigar Gorakhiya
19 июл. 2014 г. 11:02:57

И насчет того комментария в админке, пожалуйста, просто проигнорируй его.

Jigar Gorakhiya Jigar Gorakhiya
19 июл. 2014 г. 11:05:48

Мой плагин уже использует эти хуки: add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_css' )); add_action( 'admin_enqueue_scripts', array(&$this, 'my_enqueue_scripts_js' ));

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 11:19:39

Где вы отобразили ваш выпадающий список - в админке или на фронтенде?

Jigar Gorakhiya Jigar Gorakhiya
19 июл. 2014 г. 11:39:39

на фронтенде для конечного пользователя

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 11:46:36
Показать остальные 9 комментариев
5

Добавьте это в PHP-страницу вашего плагина

add_action("wp_ajax_ajax_plugin_call", "ajax_plugin_call_callback"); 
add_action("wp_ajax_nopriv_ajax_plugin_call", "ajax_plugin_call_callback");

Ajax-функция в PHP-странице

function ajax_plugin_call_callback{
   global $wpdb;
   print_r($_POST) ; 
   // напишите ваш PHP-код
   die;
}

Ваш JavaScript-код должен выглядеть так

jQuery(document).ready(function(){
  jQuery('#formID').bind('submit', function() { // Кнопка отправки формы
      var form_value =  jQuery('#formID'); 
      var form_data = form_value.serialize(); // Сериализация формы
      form_data['action']='ajax_plugin_call'; // Действие 
     jQuery.post('<?php  echo admin_url('admin-ajax.php'); ?>',form_data,function(response){

         // Здесь будет Ajax-ответ

       });
    }
 }); 

Проверьте это, это поможет вам в работе с Ajax-запросами в WordPress-плагине.

19 июл. 2014 г. 13:32:48
Комментарии

Спасибо за ваш ответ, но, пожалуйста, уточните. Ваш ответ считается дампом кода.

engelen engelen
19 июл. 2014 г. 13:54:21

@engelen эй, я использовал ajax вот так: var data = { current_datedddd: sdfdsfsdf, post_id: "'.$duplicate_of.'", action: "call_addon_price1" '.$attribute_fields_str.' }; alert(sdfdsfsdf); он отправляет значение времени, но в функции action: "call_addon_price1" я не могу сохранить в переменную используя POST

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 14:27:35

Можешь сказать, что такое "$attribute_fields_str"?

Riteshdjoshi Riteshdjoshi
19 июл. 2014 г. 14:31:15

@engelen ты можешь проверить мой ajax запрос http://test.skovian.com/thefoodieclub.com/dine/dine/lunch-at-olive-bistro/

Sanjay Nakate Sanjay Nakate
19 июл. 2014 г. 14:34:55

Попробуй это add_action("wp_ajax_ajax_call_addon_price1", "call_addon_price1_callback"); add_action("wp_ajax_nopriv_call_addon_price1", "call_addon_price1_callback");

  function call_addon_price1_callback(){
   попробуй это в своем плагине
   print_r($_POST);
   die;
  }
Riteshdjoshi Riteshdjoshi
19 июл. 2014 г. 14:45:11
0

Я использую следующий код для вызова AJAX, и он работает корректно. Здесь я отправляю переменную time на эту страницу с помощью POST $.post("'. plugins_url().'/woocommerce-booking/gettime.php",

var time=0;
jQuery("#time_slot").change(function()
                                {   
                                time=time_slot.value;
                            $.post("'. plugins_url().'/woocommerce-booking/gettime.php",
                                 {name: time},
                                  function(response){
                                  console.log(response);
                                  }
                                );  
                                 });

Мой файл gettime.php выглядит следующим образом и получает ответ от моего AJAX-вызова.

<?php session_start();
    echo $name= $_POST["name"];
    file_put_contents("name.txt", $name)

 ?>
21 июл. 2014 г. 08:56:52
0

Сначала вам необходимо подключить скрипт и определить URL. Затем нужно создать функцию для AJAX-колбэка и добавить действие WordPress, которое будет её вызывать. Вот видео, где я объясняю этот процесс, надеюсь, поможет. :)

https://www.youtube.com/watch?v=R7OK-TtNuEc

25 июл. 2014 г. 05:27:20