Проблема с настройкой AJAX-запроса в WordPress (с помощью jQuery)

#php #jquery #wordpress

#php #jquery #wordpress

Вопрос:

Я получаю сообщение об ошибке «500 (внутренняя ошибка сервера). Я прошел через множество решений здесь, и они, похоже, не меняют мой результат, и я не уверен, почему. Я все еще учусь, WordPress и Ajax поэтому любая помощь приветствуется!

Мой functions.php :

 <?php
// register and enqueue custom js scripts
add_action('wp_enqueue_scripts', 'hyix_enqueue_custom_js');
function hyix_enqueue_custom_js() {
    //enqueue zip-search-popup.js
    wp_enqueue_script('zip-search-popup', get_stylesheet_directory_uri().'/js/zip-search-popup.js', array('jquery'), false, true);
    wp_localize_script('zip-search-popup', 'from_php', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
} 
//hook zip-search function into ajax
add_action( 'wp_ajax_zip_search', 'zip_search' );
//same hook for users not logged in
add_action( 'wp_ajax_nopriv_zip_search', 'zip_search' );

//query for pulling in shipping data
function zip_search() {
  $submittedZip = $_REQUEST['submittedZip'];
  global $wpdb;
  // The SQL query
  $response  =  $wpdb-> get_results("SELECT {$wpdb->prefix}woocommerce_shipping_zones.zone_name ".
              "FROM {$wpdb->prefix}woocommerce_shipping_zone_locations ".
              "INNER JOIN {$wpdb->prefix}woocommerce_shipping_zones ".
              "ON {$wpdb->prefix}woocommerce_shipping_zone_locations.zone_id = {$wpdb->prefix}woocommerce_shipping_zones.zone_id ".
              "WHERE location_code = '$submittedZip' ");
  $response = array(
    'request' => $_REQUEST,
    'zip' => $submittedZip,
    'test' => 'is ok',
  );
  wp_send_json( $response );
  // echo $response;
  die();
}
  

Мой файл jQuery — zip-search-popup.js :

   (function($) {
      $(document).ready(function() {
        $('.zip-bar-button').click(function(event) {
          event.preventDefault();
          submittedZip = $("#zipcode-bar-input").val();
          console.log(submittedZip);
          $.ajax({
            url: from_php.ajax_url,
            type: "POST",
            dataType: "json",
            data: {
              action : 'zip_search',
              submittedZip : submittedZip,
            },
            success: function (response) {
              console.log("this is the response: "   response);
              alert("working");
            },
          })
        })
      })
    })(jQuery);
  

Комментарии:

1. Вызывается ли ваш URL-адрес ajax?

2. Вы имеете в виду это? $.ajax({ url: from_php.ajax_url,

3. ДА…………

4. Это в коде. Я не понимаю, о чем вы спрашиваете? Вы говорите, я проверял, действительно ли он вызывается? Если да, то как мне это сделать?

5. Проверьте сетевую консоль браузера, чтобы узнать, вызывается ли какой-либо запрос через ajax нажатие кнопки. Также откуда вы знаете его ошибку 500? где вы это видите?

Ответ №1:

Это работает code для вас, вам нужно добавить это code в свой child-theme functions.php я внес несколько изменений в код, как вы wp_enqueue_scripts в WordPress.

дочерняя тема (functions.php )

 function my_custom_scripts() {

    $myvars = array( 
        'ajaxurl' => admin_url( 'admin-ajax.php' ) //admin ajax
    );
  
  wp_enqueue_script( 'my-ajax-request', get_stylesheet_directory_uri() . '/js/zip-search-popup.js', array( 'jquery' ),'',true );
    wp_localize_script( 'my-ajax-request', 'MyAjax', $myvars );

}
add_action( 'wp_enqueue_scripts', 'my_custom_scripts' );

//hook zip-search function into ajax
add_action( 'wp_ajax_zip_search', 'zip_search' );
//same hook for users not logged in
add_action( 'wp_ajax_nopriv_zip_search', 'zip_search' );

//query for pulling in shipping data
function zip_search() {
  $submittedZip = $_REQUEST['submittedZip'];
  global $wpdb;

  //The SQL query
  $response  =  $wpdb-> get_results("SELECT {$wpdb->prefix}woocommerce_shipping_zones.zone_name ".
              "FROM {$wpdb->prefix}woocommerce_shipping_zone_locations ".
              "INNER JOIN {$wpdb->prefix}woocommerce_shipping_zones ".
              "ON {$wpdb->prefix}woocommerce_shipping_zone_locations.zone_id = {$wpdb->prefix}woocommerce_shipping_zones.zone_id ".
              "WHERE location_code = '$submittedZip' ");
  $response = array(
    'request' => $_REQUEST,
    'zip' => $submittedZip,
    'test' => 'is ok',
  );
  wp_send_json( $response );
}
  

дочерняя тема (js-файл — код jQuery) zip-search-popup.js

 $(document).ready(function () {
    $('.zip-bar-button').click(function (event) {
        event.preventDefault();
        submittedZip = $("#zipcode-bar-input").val();
        console.log(submittedZip);
        $.ajax({
            url: MyAjax.ajaxurl,
            type: "POST",
            dataType: "json",
            data: {
                action: 'zip_search',
                submittedZip: submittedZip,
            },
            success: function (response) {
                console.log("this is the response: "   response);
                alert("working");
            },
        })
    })
})
  

Ответ №2:

Чтобы узнать, что происходит не так, проверьте error.log вашего php-сервера ..?