Jquery 在AJAX请求后显示HttpResponse的结果

Jquery 在AJAX请求后显示HttpResponse的结果,jquery,python,ajax,django,Jquery,Python,Ajax,Django,我有一个页面,在初始加载时显示数据库中的所有自由职业者。我有一个函数,它创建一个POST请求,传递三个select元素的数据,从数据库中检索特定的匹配项 $(document).ready(function() { $('select.university').change(function(){ $.ajax({ type: 'POST', url: '#', data: {

我有一个页面,在初始加载时显示数据库中的所有自由职业者。我有一个函数,它创建一个POST请求,传递三个select元素的数据,从数据库中检索特定的匹配项

$(document).ready(function() {
    $('select.university').change(function(){
        $.ajax({
                type: 'POST',
                url: '#',
                data: {
                university: $('select.university').val(),
                skill: $('select.skill').val(),
                city: $('select.city').val()
                },
                dataType: 'html'
         });
         return false;
    });
});
我的视图获取数据并通过HttpResponse返回:

def browse_freelancers(request):
    if request.method == 'GET':
        ...
    else:
        skills = request.POST.getlist('skill')
        universities = request.POST.getlist('university')
        cities = request.POST.getlist('city')

        # fetch from database

        return HttpResponse({'freelancers': freelancers,
                         'skills': skills,
                         'universities': universities,
                         'cities': cities})

特定的fetch肯定正在执行,因为我可以在调试器中逐步执行它,但HTML中没有任何更改。我缺少什么?

您需要将
数据类型设置为“json”,然后在您的视图中:

return HttpResponse(content=json.dumps({'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities}))

您需要将
dataType
设置为“json”,然后在视图中:

return HttpResponse(content=json.dumps({'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities}))
在你看来,

from django.utils import simplejson

def browse_freelancers(request):
     ...
     data = simplejson.dumps({'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities})
     return HttpResponse(data)
如果您使用的是Django 1.7+,则可以使用而不是
HttpResponse

from django.http import JsonResponse
return JsonResponse({'foo':'bar'})
您需要在
$.ajax()
中设置一个
success
函数

在你看来,

from django.utils import simplejson

def browse_freelancers(request):
     ...
     data = simplejson.dumps({'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities})
     return HttpResponse(data)
如果您使用的是Django 1.7+,则可以使用而不是
HttpResponse

from django.http import JsonResponse
return JsonResponse({'foo':'bar'})
您需要在
$.ajax()
中设置一个
success
函数


另一种可能的结构:

if request.is_ajax() and request.method == 'POST':

    # ...

    response = {'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities}

    return JsonResponse(response)

else:
    # ...   

另一种可能的结构:

if request.is_ajax() and request.method == 'POST':

    # ...

    response = {'freelancers': freelancers,
                     'skills': skills,
                     'universities': universities,
                     'cities': cities}

    return JsonResponse(response)

else:
    # ...