Автозаполнение jqueryui в WP с Ajax, без отображения результатов (но они в консоли ...) - PullRequest
0 голосов
/ 12 сентября 2018

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

У меня есть тема Wordpress, где я реализую следующий код:

    jQuery(document).ready(function() {

        jQuery( "#title" ).autocomplete({

           /* source : JSON.parse('[{"label":"HAPPY","value":"HAPPY"},{"label":"HAPPY BIRTHDAY DETECTIVE","value":"HAPPY BIRTHDAY DETECTIVE"},{"label":"HAPPY BIRTHDAY HOLLYWOOD","value":"HAPPY BIRTHDAY HOLLYWOOD"},{"label":"HAPPY BIRTHDAY TO ME","value":"HAPPY BIRTHDAY TO ME"},{"label":"HAPPY DAYS","value":"HAPPY DAYS"},{"label":"HAPPY DAYS ","value":"HAPPY DAYS "},{"label":"HAPPY DAYS ","value":"HAPPY DAYS "},{"label":"HAPPY DAYS ","value":"HAPPY DAYS "},{"label":"HAPPY END","value":"HAPPY END"},{"label":"HAPPY ENDING","value":"HAPPY ENDING"},{"label":"HAPPY EVER AFTERS","value":"HAPPY EVER AFTERS"},{"label":"HAPPY EVER AFTERS","value":"HAPPY EVER AFTERS"},{"label":"HAPPY FAMILY","value":"HAPPY FAMILY"},{"label":"HAPPY FAMILY","value":"HAPPY FAMILY"},{"label":"HAPPY FAMILY","value":"HAPPY FAMILY"},{"label":"HAPPY GILMOUR","value":"HAPPY GILMOUR"},{"label":"HAPPY HOUR","value":"HAPPY HOUR"},{"label":"HAPPY HOUR","value":"HAPPY HOUR"},{"label":"HAPPY MAGIC","value":"HAPPY MAGIC"},{"label":"HAPPY TANK YOU MORE PLEASE","value":"HAPPY TANK YOU MORE PLEASE"},{"label":"HAPPY TANK YOU MORE PLEASE","value":"HAPPY TANK YOU MORE PLEASE"},{"label":"HAPPY TANK YOU MORE PLEASE","value":"HAPPY TANK YOU MORE PLEASE"},{"label":"HAPPY TANK YOU MORE PLEASE","value":"HAPPY TANK YOU MORE PLEASE"},{"label":"HAPPY TOGETHER","value":"HAPPY TOGETHER"},{"label":"HAPPY TOGETHER","value":"HAPPY TOGETHER"}]'), */

            minChars: 3,

            source: function(request,response) {
                jQuery.ajax({
                    type: 'POST',
                    dataType: 'json',
                    url: '/wordpress/wp-admin/admin-ajax.php',

                    data: 'action=get_listing_names&name='+jQuery("#title").val(),

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

            }

        });

});

В файле functions.php темы, после того, как я зарегистрировал правильную функцию, я написал что-то вроде этого:

function ajax_listings() {

global $wpdb; //get access to the WordPress database object variable
$return_arr = array();
//get names of all businesses
$q = $wpdb->esc_like(stripslashes($_POST['name'])).'%'; //escape for use in LIKE statement
$mydb = new wpdb('xxx','xxx','xxxx','xxxx');
$rows = $mydb->get_results("select id,title from table1 where title like '".$q."%' order by title asc");

foreach( $rows as $row) {

    $row_array['label'] = $row->title;
    $row_array['value'] = $row->title;
    array_push($return_arr,$row_array);
    }

echo json_encode($return_arr);
die();

}

Все хорошо. Я вижу, что в Chrome я получаю как эхо PHP (на вкладке предварительного просмотра этого вызова Ajax), так и данные в случае успешного вызова Ajax. Данные правильно закодированы в JSON, как я это проверил, просмотрев цвета в консоли, и с помощью этого ответа Как проверить, является ли строка допустимой строкой JSON в JavaScript, без использования Try / Catch в функции обратного вызова success .

enter image description here enter image description here

Однако результаты просто не отображаются. Самое смешное, что я скопировал и вставил полученную из PHP строку (временно исключив json_encode) и жестко запрограммировал ее (вы можете увидеть набор данных в качестве источника комментариев), и все работает.

Итак, я не знаю, почему результаты не отображаются, если набор данных отправляется из PHP, но они есть, если я копирую и вставляю тот же набор данных (в виде строки) и анализирую как JSON в Javascript.

Один из обходных путей может заключаться в том, чтобы попросить PHP вернуть строку, а затем проанализировать ее с помощью Javascript, но я понятия не имею, как справиться с этой ситуацией, поскольку автозаполнение, по-видимому, не предоставляет такой возможности.

Спасибо! Fabio

...