Django / Ajax获取请求


                    

我正在尝试使用Django和Ajax实现客户端/服务器通信,而Ajax请求遇到问题。</ p>

这是我的观点:</ p>

来自django.http的

 导入HttpResponse
从rest_framework.renderers导入JSONRenderer
从rest_framework.parsers导入JSONParser

从taskmanager.models导入Task
从taskmanager.serializers导入TaskSerializer

类JSONResponse(HttpResponse):

     def init __(self,data,** kwargs):
         内容= JSONRenderer()。render(数据)
         kwargs ['content_type'] ='application / json'
         超级(JSONResponse,self).
init __(content,** kwargs)

def task_list(request):
     如果request.method =='GET':
         任务= Task.objects.all()
         序列化器= TaskSerializer(任务,很多=真)
         返回JSONResponse(serializer.data)
</ code> </ pre>

还有我的jquery代码:</ p>

  $(document).ready(function(){
     $(“ button”)。click(function(){
         $ .ajax({
             类型:“ get”,
             网址:“ http://127.0.0.1:8000/”,
             dataType:“ json”,
             成功:功能(数据){
                 alert(data [0] [“ title”]);
             },
             错误:function(){
                 alert(“错误”);
             }
         });
     });
});
</ code> </ pre>

每次服务器返回状态200 OK,但都会执行错误功能。 当我直接在浏览器中访问该URL时,我得到有效的json输出。 更重要的是,如果我将输出结果放在文件中,并在ajax调用url中引用它,那么它将按预期工作。</ p>

P.S。 对不起,我的英语。</ p>

更新:而且,当我在FireBug中查看响应详细信息时,它没有响应正文。 </ p>

响应头:</ p>

  Server:WSGIServer / 0.1 Python / 2.7.3
日期:2013年5月10日,星期五,格林尼治标准时间
内容类型:application / json
</ code> </ pre>

更新:将AJAX网址更改为:http://127.0.0.1:8000/?callback=?” </ code>,现在我得到响应正文: [{“ id”:“ 518a92147c2fce152b081878“,”标题“:”新任务“},{” id“:” 518a905e7c2fce1516b8f9dc“,”标题“:”保存星系“},{” id“:” 518a904e7c2fce1516b8f9da“,”标题“:”做桶“ roll“}] </ code>,状态-200,错误-parsererror。</ p>
     </ div>

展开原文

原文

I'm trying to implement client/server communication using Django and Ajax and I'm having problem with Ajax request.

Here is my view:

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)

And my jquery code:

$(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");
            }
        });
    });
});

Every time server returns status 200 OK, but the error function is executed. When I visit that url directly in browser I get valid json output. Even more, if I put that output in a file and reference it in ajax call url it works as intended.

P.S. Sorry for my English.

UPDATE: Also, when I view response details in FireBug it has no response body.

Response headers:

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

UPDATE: changed AJAX url to: "http://127.0.0.1:8000/?callback=?" and now I get response body: [{"id": "518a92147c2fce152b081878", "title": "New task"}, {"id": "518a905e7c2fce1516b8f9dc", "title": "Save the galaxy"}, {"id": "518a904e7c2fce1516b8f9da", "title": "Do a barrel roll"}], status -- 200 and error -- parsererror.

2个回答


尝试返回HttpResponse(serializer.data,content_type ='application / json')</ code>
在您看来。</ p>

然后在您的jQuery代码中更改 type:“ GET” </ code>并删除 dataType:“ json” </ code>。</ p>
     </ div>

展开原文

原文

Try return HttpResponse(serializer.data, content_type='application/json') in your view.

And in your jQuery code change type: "GET" and remove dataType: "json".


我认为您的js内容协商中存在错误</ p>

代替</ p>

  dataType:“ json”,
</ code> </ pre>

使用</ p>

  contentType:'application / json',
</ code> </ pre>

或尝试不使用此字段</ p>
     </ div>

展开原文

原文

I think there is an error in your js Content negotietion

instead of

dataType: "json",

use

contentType: 'application/json',

or try without this field

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问