我正在尝试使用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中引用它,它就会按预期工作。
P.S。抱歉我的英文。
更新:此外,当我在FireBug中查看响应详细信息时,它没有响应正文。
回复标题:
Server:WSGIServer/0.1 Python/2.7.3
Date:Fri, 10 May 2013 07:56:23 GMT
Content-Type:application/json
更新:将AJAX网址更改为:"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。
答案 0 :(得分:2)
我认为您的js内容协商存在错误
而不是
dataType: "json",
使用
contentType: 'application/json',
或尝试没有此字段
答案 1 :(得分:1)
试试return HttpResponse(serializer.data, content_type='application/json')
在你看来。
在您的jQuery代码中更改type: "GET"
并删除dataType: "json"
。