Intereting Posts

Обратная связь Ajax 0

Я прочитал множество ответов на этом сайте и не могу найти проблему с моим кодом.

Форма:

<?php while (have_posts()) : the_post()?> <form method='post' id="dav-international" > <label for="dav-address">Address:</label><input type="text" name="dav-address" id="dav-address"/> <button type="submit" id="submit">Submit</button> </form> <?php endwhile;?> 

Функции находятся в function.php (домашняя страница уже вставлена ​​в очередь):

  add_action('wp_enqueue_scripts', 'dav_script'); function dav_script(){ if (is_front_page()){ $dav_nonce = wp_create_nonce('contact_form'); wp_localize_script('home-page', 'ajaxObj', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => $dav_nonce, )); } } add_action('wp_ajax_nopriv_dav_validation', 'dav_form_validation'); add_action('wp_ajax_dav_validation', 'dav_form_validation'); function dav_form_validation(){ global $wpdb; if ($_SERVER["REQUEST_METHOD"] == 'POST'){ check_ajax_referer('contact_form'); $dav_address = sanitize_text_field($_POST['info']); $dav_ajax_data = array(); $dav_ajax_data['dav-address'] = $dav_address; echo json_encode($dav_ajax_data); } wp_die(); } 

и jQuery:

 var $j = jQuery; $j('#submit').click(function(e){ var $j = jQuery; e.preventDefault(); if ($j('#dav-address').val().length > 0){ var formInfo = $j('form').serialize(); var formdata = { action : 'dav_validation', _ajax_nonce: ajaxObj.nonce, info : formInfo } $j.ajax({ type:'post', url: ajaxObj.ajaxurl, data: formdata, success: function(data){ console.log(data); } }) } }); 

Я считаю, что я правильно выполнил инструкции по WordPress codex, но консоль продолжает выводить 0. Я застрял на этом и, похоже, не понял этого.

Что заставляет вас думать, что это когда-нибудь будет правдой?

 if (isset($_POST['submit'])){ 

В function dav_form_validation die() находится в 2 условных function dav_form_validation . Его следует вызывать независимо от того, выполнены ли условия. Добавьте предложения 2 else и возвращайте сообщения об ошибках.

Обычно ответ «0» означает, что крючки ajax не найдены. Но в этом отношении ваш код выглядит нормально.

Решила проблему благодаря руководству @shanebp: проблема заключалась в том, как данные вызывались через PHP и ajax. Вместо использования атрибута name в поле ввода я использовал var_dump для просмотра вывода $ _POST и обнаружил, что массив, созданный (formdata) в jQuery, был тем, который извлекал $ _POST. Вместо использования атрибута name мне пришлось вернуть ключ информации, переданный через массив formdata в моем ajax. Я предполагаю, что WordPress использует ajax и php.