Поддержка Проблемы и решения Почему только иногда данные передаются по ajax? (или вообще не передаются)

  • форма
    Id верхнего выпадающего списка: fld_5264117_1, а у нижнего: fld_5733170_1.
    Я хочу сделать так, что бы после выбора пользователем региона посредством связи по ajax заполнились localities (каждый region содержит свои localities). Для этого я написал следующее:
    1) скрипт

    jQuery(document).ready(function ($) {
        function fill_region_selector() { //заполняем список выбора регионов   
            $.post(my_ajax_obj.ajax_url, {
                _ajax_nonce: my_ajax_obj.nonce,
                action: "get_regions",
            }, function (data) {
                $("#fld_5264117_1").empty();
                 $("#fld_5264117_1").append('<option value="" selected disabled>Please select a region...</option>')
                for (num in data) {
                    $("#fld_5264117_1").append($('<option>',
                        {
                            value: data[num],
                            text: data[num],
                        }));
                }
            });
        }
        fill_region_selector();
    
       $("#fld_5264117_1").change(function () {
            $.post(my_ajax_obj.ajax_url, {
                _ajax_nonce: my_ajax_obj.nonce,
                action: "get_localities_for_region",
                region: this.value
            }, function (data) {
                $('#fld_5733170_1').empty();
                for (num in data) {
                    $('#fld_5733170_1').append($('<option>',
                        {
                            value: data[num],
                            text: data[num],
                        }));
                }
            });
        });
    
    }

    2) плагин (для wordpress):

    <?php
    
    /*
    Plugin Name: patfron
    Description: Обеспечение функциональности сайта
    Version: 1.0
    Author: pynix
    */
    
    add_action( 'wp_enqueue_scripts', 'enqueue_trip_planner_page' );
    function enqueue_trip_planner_page() {
        if ( ! is_page( 'trip-planner' ) ) {
            return;
        }
        wp_enqueue_script( 'ajax-script',
            plugins_url( '/js/trip_planner_ajax.js', __FILE__ ),
            array( 'jquery' ) );
    
        $my_nonce = wp_create_nonce( 'dzmitry_nonce' );
        wp_localize_script( 'ajax-script', 'my_ajax_obj', array(
            'ajax_url' => admin_url( 'admin-ajax.php' ),
            'nonce'    => $my_nonce,
        ) );
    }
    
    add_action( 'wp_ajax_get_regions', 'get_regions_ajax_handler' ); //wp_ajax_ и имя функции
    function get_regions_ajax_handler() {
        check_ajax_referer( 'dzmitry_nonce' );
        $regions = [];
        $pfdb = new wpdb('fdb_user','fdb_user_pass','fdb','ssssiiii.ipagemysql.com');
    
        foreach( $fdb->get_results("SELECT name FROM Regions;") as $key => $row) {
            $var = $row->name;
            array_push($regions, $var);
    
        }
        wp_send_json( $regions );
    }
    
    add_action( 'wp_ajax_get_localities_for_region', 'get_localities_for_region_ajax_handler' ); //wp_ajax_ и имя функции
    function get_localities_for_region_ajax_handler() {
        check_ajax_referer( 'dzmitry_nonce' );
    
        $region = $_POST['region'];
        $localities = [];
        $fdb = new wpdb('fdb_user','fdb_user_pass','fdb','ssssiiii.ipagemysql.com');
        foreach (
            $fdb->get_results( "
                                 SELECT
                                 Localities.name
                                 FROM Localities
                                 INNER JOIN Regions
                                 ON Localities.region_id = Regions.region_id
                                 WHERE Regions.name = '" . $region . "';") as $key => $row
        ) {
    
                    $reg = $row->name;
            array_push($localities, $reg);
        }
        wp_send_json( $localities );
    }

    Теперь о проблеме.
    Во-первых, это не работает, но все-таки иногда код работает, правда я не могу уловить закономерности: или из-за того, что я очищаю браузер, или из-за деактивации/активации плагина, или из-за чего-то еще.
    Во-вторых, это все не работает если смотреть на мобильном телефоне.

    Пример работы (берет из базы по ajax):
    пример работы

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

    плагин

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Жмите F12 в Chrome и в Console увидите ваши ошибки.
    Если вы смогли написать скрипт, то сможете понять и проанализировать эти ошибки и закономерности.

    Нет ошибок:

    Т.е. вы уверенны, что проблема в js cкрипте, а не в php скрипте?

    • Ответ изменён 2 года/лет, 7 мес. назад пользователем  pynix.
    • Ответ изменён 2 года/лет, 7 мес. назад пользователем  pynix.

    Значит, они есть в логах на сервере.

    Где посмотреть этот ваш «лог на сервере», который позволит определить причину проблем?

    Если debug.log, то там пусто

    Модератор SeVlad

    (@sevlad)

    wp.me/3YHjQ

    Если debug.log, то там пусто

    Чтобы писало в это файл должны быть сделаны нужные настройки в конфиге ВП.
    Напр такие:

    define( 'WP_DEBUG', true ); // Or false
    if ( WP_DEBUG ) {
        define( 'WP_DEBUG_LOG', true );
        define( 'WP_DEBUG_DISPLAY', false );
    }

    А иначе — в логах хостера.
    Но в серверные логи не пишутся клиентские ошибки (яваскрипта).

    Они были установлены:

    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    define( 'WP_DEBUG_LOG', true );

    Так что по вопросу, есть что на первый взгляд, что не так сделано в коде?

    Навскидку. Не вижу add_action( ‘wp_ajax_nopriv_…. То есть, для незалогиненых это всё вообще работать не должно.

    Юрий, большое спасибо- все работает!

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Почему только иногда данные передаются по ajax? (или вообще не передаются)» закрыта для новых ответов.