0

到目前为止,我一直使用 django 模板系统来执行这种操作。只需使用 html 模板响应 ajax 请求。

现在我正在尝试实现自动完成搜索功能,我想以 json 格式将响应发送回客户端。

一切都很好,并设置到这一点。这是我的 jQuery 部分:

$(document).ready(function(){
    $("#id_q").keyup(function(){ //the form text input
        autocomplete(this.value);
    });

    function autocomplete(inputString) {
        if(inputString.length == 0) {
            $('#autocomplete').fadeOut();
        }
        else {
            $.get("/autocomplete/", {q: ""+inputString+""}, function(data) {
                $('#autocomplete').fadeIn();
                $('#autocomplete').html(data);
            });
        }
    }
});

当使用 django 模板作为响应时,#autocomplete div 显示得很好,并且与 .html(data) 一样,这是因为我事先在模板中设置了 html,因为我希望它显示出来。

如何处理从服务器发送的数据(json格式)?数据看起来像这样:

[{'title':'titleString', 'descr':'desriptionString', 'url':'itemAbsoluteUrl'}, ..]

为了获得我的#autocomplete html,例如:

<li><a href="data.url">data.title<br>data.descr</li>

感谢您的任何反馈!

4

2 回答 2

2

首先,为了将返回数据格式化为 JSON 对象,需要在 get 调用中指定返回类型为 json。之后,您基于 json 键值对引用数据,例如 data.results。(请注意,结果必须是 JSON 对象中的键)。

$.get("/autocomplete/", {q: ""+inputString+""}, function(data) {
            $('#autocomplete').fadeIn();
            $('#autocomplete').html(data.results);
}, "json");

我不确定您当前的格式是什么,但只是为了澄清一下,您可能不想通过 JSON 发送原始 HTML。相反,将 HTML 保留在您的客户端页面上,并返回一些数据来填充它。

于 2012-07-19T12:54:29.877 回答
0

尝试

var li = $('<li><a href="'+data.url+'">'+data.title+'<br/>'+data.descr+'</a></li>')

然后你可以插入li你想要的地方,或者

$('#autocomplete').html('<li><a href="'+data.url+'">'+data.title+'<br/>'+data.descr+'</a></li>');

遍历结果

$.each(results, function(index, value){
...
})
于 2012-07-19T13:40:56.773 回答