Я пытаюсь написать простой поисковый сервер, используя Django с AJAX.
Сам сервер работает нормально, но я все еще пытаюсь добавить автозаполнение в виджет поиска.
(я не хочу использовать доступные фрагменты Django, поскольку они не выполняют именно то, что я хочу, их сложно настроить, и они не учат меня основам, как это делает интерфейс с нуля)
На стороне клиента (Javascript) я использую YUI, потому что это выглядит проще - но не против переключения на jQuery, поэтому, пожалуйста, не зацикливайтесь на этом.
В YUI поле автозаполнения принимает три параметра: вход, контейнер и источник данных.
Первые два - только виджеты, а третий интересен.
Если я напишу:
var oDS = new YAHOO.util.LocalDataSource(["apples","apples2", "broccoli", "cherries"]);
var oAC = new YAHOO.widget.AutoComplete("myInput", "myContainer", oDS);
в моем <script>
я получаю окно автозаполнения, которое автоматически заполняет эти условия.
Когда я пытаюсь заменить LocalDataSource на удаленный источник данных, например, выбрав var oDS = new YAHOO.util.ScriptNodeDataSource("127.0.0.1:8000/getNames/")
и настроив подходящее представление, автозаполнение не происходит.
Что я знаю о проблеме:
- Я знаю, что представление вызывается (при отладочной печати) - так что это не проблема.
- Я возвращаю массив json
jresponse = simplejson.dumps(response_array); return HttpResponse(jresponse, mimetype='application/javascript');
Я не думаю, что с этим есть какая-либо проблема, так как я могу получить прямой доступ к этому представлению и получить текстовое представление json, когда я это сделаю.
- Возможно, есть проблема с типом ввода, который ожидает локальный источник данных - я не знаю, как его установить.
Любая помощь (в том числе о том, как сделать это правильно в jQuery - я не против выбросить YUI), будет очень признательна.
Редактировать: После первых двух комментариев (спасибо!) Я установил firebug и начал играть с ним. Однако, это действительно грязно, поскольку на панели инструментов Yahoo много кода, и я не знаю, где его сломать. Есть ли какой-нибудь простой способ, чтобы firebug показывал мне только элементы json / xml?
@ Марат: я уже сделал это (обращаясь к своему представлению), и он возвращает строковое представление JSON (по крайней мере, это то, что показывает мой браузер). Это то, что я должен ожидать?
@ pastylegs: Вот код:
<div id="myAutoComplete">
<input id="myInput" type="text">
<div id="myContainer"></div>
</br></br>
<input type="submit">
</div>
<script type="text/javascript">
YAHOO.example.BasicLocal = function() {
{%block oDS%}
// Use a LocalDataSource
var oDS = new YAHOO.util.LocalDataSource(["apples","apples2", "broccoli", cherries"]);
//for remote - oDS = new YAHOO.util.ScriptNodeDataSource("127.0.0.1:8000/getNames/")
// Instantiate the AutoComplete
var oAC = new YAHOO.widget.AutoComplete("myInput", "myContainer", oDS);
oAC.prehighlightClassName = "yui-ac-prehighlight";
oAC.useShadow = true;
return {
oDS: oDS,
oAC: oAC
};
}();
</script>
Вид Джанго:
def getNamesXML(request):
response_array=['Apples','Oranges']
print response_array
jresponse = simplejson.dumps(response_array)
print jresponse
return HttpResponse(jresponse, mimetype='application/javascript')
Большое спасибо!