2015-07-22 2 views
0

Я пытаюсь выполнить пользовательское действие AJAX в WordPress, но оно не работает. У меня есть следующий вид:WordPress AJAX вызов не выполняется PHP

<form method='post' name='form-bid-<?php echo get_the_ID() ?>' class="bid-form"> 
    <input type='submit' name='<?php echo get_the_ID()?>' value='Licitar' class='bidvalue'> 
    <?php wp_nonce_field('ajax-bid-nonce', $post->ID); ?> 
</form> 

форма этот путь, потому что он генерируется внутри цикла, по одному для каждого сообщения на сайте, поэтому использовать идентификатор поста в качестве уникального имени для входа.

Затем я захвачу форма представить на обычае JavaScript файла:

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

// Perform AJAX bid on form submit 
$('form.bid-form').on('submit', function(e) { 

    var action = 'ajaxbid'; 
    var auction_id = e.target.name.substring('form-bid-'.length); 
    var security_container = "#".concat(auction_id); 
    var security = $(security_container).val(); 

    $.ajax({ 
     type: 'POST', 
     dataType: 'json', 
     url: ajax_bid_object.ajaxurl, 

     data: { 
      'action': action, 
      'id': auction_id, 
      'security': security 
     }, 

     success: function(data) { 
      console.log(data); 
     } 
    }); 

    e.preventDefault(); 
}); 

}); 

Эта часть работает, и печатает 0 на консоли после успеха.

Наконец, у меня есть PHP файл, в котором я зарегистрировать скрипт и иметь функцию Я хочу призвать формы представления:

function ajax_bid_init() { 
    wp_register_script('ajax-bid-script', get_template_directory_uri() .'/js/ajax-bid-script.js', array('jquery')); 
    wp_enqueue_script('ajax-bid-script'); 

    wp_localize_script('ajax-bid-script', 'ajax_bid_object', array( 
     'ajaxurl' => admin_url('admin-ajax.php') 
    )); 

    // Enable the user with no privileges to run ajax_bid() in AJAX 
    add_action('wp_ajax_nopriv_ajaxbid', 'ajax_bid'); 
} 

add_action('init', 'ajax_bid_init'); 

function ajax_bid() { 
    // First check the nonce, if it fails the function will break 
    check_ajax_referer('ajax-bid-nonce', 'security'); 
    echo json_encode(array('message'=>__('SUCCESS'))); 
    die(); 
} 

На данный момент, все, что я хотел функция вернуть этот массив и отобразите его на консоли. Однако код, кажется, не проходит здесь, и ответ AJAX всегда равен 0.

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

+0

Попробуйте проверить вкладку «Сеть» для подсказок: http://stackoverflow.com/a/21617685/2191572 – MonkeyZeus

+0

Что такое 'ajax_bid_object.ajaxurl' Я не вижу его в рамках' jQuery (document) .ready (function ($) {/ * Я не вижу его здесь :(* /}); ' – MonkeyZeus

+0

Вкладка« Сеть »показывает все, что работает нормально, и данные формы содержат именно то, что я хочу.« ajax_bid_object »- это имя переменная, которая содержит данные скрипта (см. [link] (https://codex.wordpress.org/Function_Reference/wp_localize_script)). –

ответ

0

Обнаружена проблема! Я забыл упомянуть, что я пытался сделать это с помощью зарегистрированного пользователя, так что проблема была эта линия:

add_action('wp_ajax_nopriv_ajaxbid', 'ajax_bid'); 

Это должно быть вместо этого:

add_action('wp_ajax_ajaxbid', 'ajax_bid'); 

Я скопировал первый из моего входа в систему и которые имеют смысл быть доступными только для пользователей без регистрации. Тем не менее, ставки являются противоположными.

Для получения дополнительной информации вы можете зарегистрировать как (wp_ajax, так и wp_ajax_nopriv) для той же функции, если вы хотите, чтобы она была выполнена как для зарегистрированных, так и для не зарегистрированных пользователей.

Смежные вопросы