Django Ajax返回整个html页面

时间:2016-10-30 09:31:43

标签: javascript jquery ajax django

我正在尝试使用ajax

创建实时搜索过滤器
$(function() {

$('#search-item').keyup(function() {

    $.ajax({
        type: "GET",
        url: "/toysprices/",
        data: {
            'query' : $('#search-toy').val(),
            'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
        },
        success: searchSuccess,
        dataType: 'html'
    });
});
});

function searchSuccess(data, textStatus, jqXHR)
{
    console.log(data);
}

和我的views.py

f request.method == "GET":
    search_text = request.GET['query']
    if search_text:
        search_text = request.GET['query']
        statuss = Status.objects.filter(status__contains = search_text)
    else:
        statuss = Status.objects.all()

    return render(request, 'ajax_search.html', {'statuss':statuss})

它正常工作,但它返回整个html页面,我怎样才能获得我想在模板中呈现的部分。

3 个答案:

答案 0 :(得分:1)

使用JSON返回结果将解决您的问题。

例如,

#Django view

def search(request):
    if request.method == "GET":
        return_array = []
        search_text = request.GET.get('query') # Always put request.GET.get('param') instead of request.GET['param']
        if search_text:
            search_text = request.GET.get('query')
            statuss = Status.objects.filter(status__icontains = search_text)
        else:
            statuss = Status.objects.all()

        for i in statuss:
            return_sub_array = {}
            return_sub_array['status_name'] = i.status_name
            return_array.append(return_sub_array)
        return HttpResponse(json.dumps(return_array))

#Jquery函数

$('#search-item').keyup(function() {

    $.ajax({
        type: "GET",
        url: "/toysprices/",
        dataType: 'JSON',
        data: {
            'query' : $('#search-toy').val(),
            'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
        },
        success: function(data){
                   if(data.length > 0 )
                    {   
                            console.log(data);
                            for (var i = 0; i < data.length ; i++) {
                                var obj = data[i]['status_name'];
                                console.log(obj)
                                // further logic goes here
                            }
                    }
                    else {
                        console.log("No result found");
                    }
                 },
         error:function(data){
                 console.log('error')
                 console.log(data)
          }
    });
});

答案 1 :(得分:1)

在大多数情况下,它是您用来调用的 url,假设您在 url.py 中有以下路径

path('Import/', views.Import, name='import'),#.....1
path('getMetaData/', views.metaData, name='metadata'),#....2

和您的 url: http://127.0.0.1:8000/folder/Import/ 正在使用显示页面的第一个路径,如果您希望从 views.py 中的 metaData 函数从 ajax 获取数据,如果您使用上面的路径 2,它将为您提供html,所以你的路径应该如下:

path('Import/getMetaData/', views.metaData, name='metadata'),#....3

答案 2 :(得分:0)

您正在渲染html并在视图中返回它。除了html之外,这个视图没有什么可期待的。为了将JSON对象作为响应返回,您的视图应该返回如下响应:

eval_poly