Bootstrap typeahead в joomla не принимает исходный массив

У меня проблема с вводом Bootstrap v2.3.1 в Joomla 1.5 - он отлично работает только тогда, когда я использую метод data-source='["..."]' внутри входного тега, но не принимает удаленный php-сгенерированный mysql запрос, закодированный в json.

Вот мой код, скопированный из учебника:

<input type="text" id="search" data-provide="typeahead"/>
<script>    
$(function(){
    $("#appendedInputButton").typeahead({
        source: function(query, process) {
            $.ajax({
                url: 'http://www.mydomain.com/source.php',
                type: 'POST',
                data: {q: query},
                dataType: 'JSON',
                async: true,
                success: function(data) {
                    process(data);
                }
            })
        }
    })
})
</script>

а вот упрощенный source.php, который выводит массив в кодировке json:

//joomla required stuff   
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$db = &JFactory::getDBO();

$array = array();
$array[] = "item1";
$array[] = "item2";
$array[] = "item3";
//this is just for testing

echo json_encode($array);

Я проверил вывод, используя простую загрузку jQuery ajax после нажатия кнопки, и он распечатывает массив, но я не могу заставить его работать с typeahead. Кроме того, typeahead даже не работает, если я предоставлю массив следующим образом:

var colors = ["red", "blue", "green", "yellow", "brown", "black"];
$('#search').typeahead({source: colors});

Любая помощь приветствуется - я не знаю, проблема ли это в Joomla, в моем коде или в чем-то еще.


person nahero    schedule 15.04.2013    source источник
comment
Вы уверены, что это должен быть запрос POST? Кроме того, вы устанавливаете тип содержимого как application/json, чтобы браузер (и jQuery) мог правильно угадать правильный тип данных?   -  person pickypg    schedule 17.04.2013
comment
Думаю, я сузил проблему до нескольких загрузок jquery/mootools. Кажется, не может решить эту проблему, потому что joomla требует, чтобы эти библиотеки работали, и даже метод noconflict не решает эту проблему. Кажется, я не могу заставить какой-либо jquery ajax-запрос работать должным образом, я все еще возился...:/   -  person nahero    schedule 18.04.2013
comment
Я не знаком с Joomla или Mootools, но нашел эту статью, что может вам помочь. Если вы пытаетесь вернуть данные JSON, вы должны установить для возвращаемого заголовка Content Type значение application/json перед отправкой каких-либо выходных данных клиенту.   -  person pickypg    schedule 18.04.2013


Ответы (2)


Для тех, кто думает об этом: я не смог заставить загрузочный typeahead работать на моем сайте joomla 1.5, вместо этого использовал typeahead.js, и он отлично работает > ссылка

person nahero    schedule 21.04.2013

Возможно, это немного поздно, но тем не менее: На самом деле, это работает отлично (Joomla! 3.9.4, Bootstrap 3), вам нужно создать экземпляр класса Joomla JResponseJson, чтобы получить данные в формате json.

Итак, вместо этого echo json_encode($array); вы должны написать это:

 $data = new JResponseJson($array);
 echo $data;

Код здесь

А работающий Hello-Wolrd-Component находится здесь:

person pr-olga    schedule 03.10.2019