3

我正在尝试使用 Django 和 Ajax 实现客户端/服务器通信,但 Ajax 请求有问题。

这是我的看法:

from django.http import HttpResponse
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser

from taskmanager.models import Task
from taskmanager.serializers import TaskSerializer


class JSONResponse(HttpResponse):

    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)


def task_list(request):
    if request.method == 'GET':
        tasks = Task.objects.all()
        serializer = TaskSerializer(tasks, many=True)
        return JSONResponse(serializer.data)

我的jQuery代码:

$(document).ready(function(){
    $("button").click(function(){
        $.ajax({
            type: "get",
            url: "http://127.0.0.1:8000/",
            dataType: "json",
            success: function(data){
                alert(data[0]["title"]);
            },
            error: function(){
                alert("error");
            }
        });
    });
});

每次服务器返回状态 200 OK,但执行错误函数。当我直接在浏览器中访问该 url 时,我得到了有效的 json 输出。更重要的是,如果我将该输出放在一个文件中并在 ajax 调用 url 中引用它,它会按预期工作。

PS对不起我的英语。

更新:另外,当我在 FireBug 中查看响应详细信息时,它没有响应正文。

响应标头:

Server:WSGIServer/0.1 Python/2.7.3
Date:Fri, 10 May 2013 07:56:23 GMT 
Content-Type:application/json

更新:将 AJAX url 更改为:"http://127.0.0.1:8000/?callback=?"现在我得到响应正文:[{"id": "518a92147c2fce152b081878", "title": "New task"}, {"id": "518a905e7c2fce1516b8f9dc", "title": "Save the galaxy"}, {"id": "518a904e7c2fce1516b8f9da", "title": "Do a barrel roll"}],状态 - 200 和错误 - parsererror。

4

2 回答 2

2

我认为你的 js 内容协商有错误

代替

dataType: "json",

利用

contentType: 'application/json',

或尝试不使用此字段

于 2013-05-10T07:44:42.973 回答
1

在你看来尝试return HttpResponse(serializer.data, content_type='application/json')

并在您的 jQuery 代码中更改type: "GET"和删除dataType: "json".

于 2016-03-04T07:38:29.360 回答