2016-12-01 2 views
0

Это продолжение моего вопроса here. У меня есть настраиваемый шаблон страницы с формой с выпадающим списком и одним вводом. Когда пользователь отправит форму, результат будет отображаться, это работает правильно. Но у меня проблема, браузер загружается при извлечении данных в базе данных.AJAX form submit in WordPress не работает правильно (conti ...)

Я пытаюсь использовать AJAX для предотвращения обновления браузера. Я только что обновил функцию AJAX в functions.php и JS. Теперь страница не обновляется, когда пользователь нажимает кнопку отправки. Но результаты не отображаются. Я использую is_page, чтобы отобразить разные результаты на определенных страницах

Как это исправить? Как я могу вызвать пользовательский PHP-файл в AJAX?

AJAX (functions.php)

function ajax_enqueue_sl(){ 
    wp_enqueue_script('ajax_load_sl', get_template_directory_uri().'/js/alternate-dropdown.js', array('jquery')); 
    wp_localize_script('ajax_load_sl', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php'))); 
} 
    add_action('wp_enqueue_scripts', ajax_enqueue_sl); 

add_action('init', 'registerFormAction'); 
function registerFormAction(){ 
    // To handle the form data we will have to register ajax action. 
    add_action('wp_ajax_nopriv_submitAjaxForm','submitAjaxForm_callback'); 
    add_action('wp_ajax_submitAjaxForm','submitAjaxForm_callback'); 
} 

function submitAjaxForm_callback(){ 
    global $wpdb; 
    if(is_page(9208)){ 
     //ROCK ON! 
     if (isset($_POST['store_list']) && $_POST['store_list'] != 'Select by Store'){ 
     $store_list = $_POST['store_list']; 
     $stores= $wpdb->get_results($wpdb->prepare("SELECT street FROM tablename WHERE stores= '" . $store_list . "' AND col IN ('test') ORDER BY street ASC", OBJECT)); 
     foreach ($stores as $record_s){ 
      echo '<div class="records">'; 
      echo '<div><span class="icons-tabbed-store icon-icon-stores">' . $record_s->street . '</span></div>'; 
      echo '</div>'; 
     } 
    } elseif (isset($_POST['mall_list']) && $_POST['mall_list'] != 'Select by Mall'){ 
     $mall_list = $_POST['mall_list']; 
     $street = $wpdb->get_results($wpdb->prepare("SELECT stores FROM tablename WHERE street= '" . $street_list . "' AND col IN ('test') ORDER BY stores ASC", OBJECT)); 
     foreach ($street as $record_m){ 
      echo '<div class="records">'; 
      echo '<div><span class="icons-tabbed-store icon-icon-stores">' . $record_m->stores . '</span></div>'; 
      echo '</div>'; 
     } 
    } 
    } 
    wp_die(); 
} 

РНР ж/html (test.php)

$results_street = $wpdb->get_results('SELECT DISTINCT street FROM tablename WHERE code IN ("test1") ORDER BY street ASC', OBJECT); 
$results_stores = $wpdb->get_results('SELECT DISTINCT stores FROM tablename WHERE code IN ("test2") ORDER BY stores ASC', OBJECT); 

<form action='' method='post' name='myform' id="myform"> 
<div class="pos-div"> 
<select name="street_list" id="filterbystreet"> 
    <option name="default" class="filter_by" value="Select by">Select by</option> 
    <?php 
    foreach($results_street as $option){ 
     if(isset($_POST['street_list']) && $_POST['street_list'] == $option->street) 
      echo '<option name="street_list" class="filter_by" selected value="'. $option->street .'">'. $option->street .'</option>'; 
     else  
     echo '<option name="street_list" class="filter_by" value="'. $option->street .'">'. $option->street .'</option>'; 
    }; 
    ?> 
</select> 
</div> 
<span class="or">or</span> 
<div class="pos-div"> 
<select name="store_list" id="filterby"> 
    <option name="default" class="filter_by" value="Select by">Select by</option> 
    <?php 
    foreach($results_stores as $option){ 
     if(isset($_POST['store_list']) && $_POST['store_list'] == $option->stores) 
      echo '<option name="store_list" class="filter_by" selected value="'. $option->stores .'">'. $option->stores .'</option>'; 
     else  
     echo '<option name="store_list" class="filter_by" value="'. $option->stores .'">'. $option->stores .'</option>'; 
    }; 
    ?> 
</select> 
</div> 
<input type="submit" value="List all partner stores" class="pos-submit"/> 
</form> 

if (isset($_POST['store_list']) && $_POST['store_list'] != 'Select by Store'){ 
     $store_list = $_POST['store_list']; 
     $stores= $wpdb->get_results($wpdb->prepare("SELECT street FROM tablename WHERE stores= '" . $store_list . "' AND code IN ('test3') ORDER BY street ASC", OBJECT)); 
     foreach ($stores as $record_s){ 
      echo '<div class="records">'; 
      echo '<div><span>' . $record_s->street. '</span></div>'; 
      echo '</div>'; 
     } 
    } elseif (isset($_POST['street_list']) && $_POST['street_list'] != 'Select by'){ 
    $street_list = $_POST['street_list']; 
    $streets = $wpdb->get_results($wpdb->prepare("SELECT street FROM tablename WHERE street_list= '" . $street_list. "' AND code IN ('test3') ORDER BY stores ASC", OBJECT)); 
    foreach ($streets as $record_m){ 
     echo '<div class="records">'; 
     echo '<div><span>' . $record_m->stores . '</span></div>'; 
     echo '</div>'; 
    } 
} 

ajax_js.js

jQuery(document).ready(function($){ 
    //$('#myform').submit(ajaxFormSubmit); 

    $('#filterbystreet').change(function(){ 
     $('#filterbystore').prop('selectedIndex','Select by Store'); 
    }); 

    $('#filterbystore').change(function(){ 
     $('#filterbystreet').prop('selectedIndex','Select by'); 
    }); 

    jQuery('.pos-submit').on('click',function(e){ 
     e.preventDefault(); 
     var myform = jQuery('#myform').serialize(); 

     jQuery.ajax({ 
      type:"POST", 
      // Get the admin ajax url which we have passed through wp_localize_script(). 
      url: ajax_object.ajax_url, 
      action: "submitAjaxForm", 
      data: myform, 
      success:function(data){ 
       jQuery(".records").html(data); 
       console.log(data); 
      } 
     }); 
    }); 
}); 

ответ

1

Прежде всего на wp_enqueue_scripts функции и wp_localize_script , вы должны зарегистрировать, затем вставить ключ в функцию, как пример в кодексе

// Register the script 
    wp_register_script('ajax_load_sl', get_template_directory_uri().'/js/alternate-dropdown.js', array('jquery')); 

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

    // Enqueued script with localized data. 
    wp_enqueue_script('ajax_load_sl'); 

Детали и пример here

В вашем PHP скрипт, вы не упомянули, если он стоит в функции (я так думаю, и предполагаю, что это), в верхней части функции, вам нужно добавить

global $wpdb; 

Тогда вы могли бы использовать $wpdb

имя_таблицы, никогда не будет признать, ваша потребность положить wp_posts, где wp_ - ваш префикс таблицы, или $wpdb->prefix.'posts', если вы не хотите знать о префиксе.

global $wpdb; 

$results_street = $wpdb->get_results('SELECT DISTINCT street FROM wp_posts WHERE code IN ("test1") ORDER BY street ASC', OBJECT); 
$results_stores = $wpdb->get_results('SELECT DISTINCT stores FROM wp_posts WHERE code IN ("test2") ORDER BY stores ASC', OBJECT); 

Изменить wp_posts с вами, право имя db.

Сообщите мне, если это работает после!

+0

i уже сделал это. пожалуйста, взгляните на мой пост. но все же результаты не отображаются – User014019

+0

Вы действительно оставляете tablename !! – Benoti

+0

Что вы имеете в виду? – User014019