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 call 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=?"と、応答 body: [{"id": "518a92147c2fce152b081878", "title": "New task"}, {"id": "518a905e7c2fce1516b8f9dc", "title": "Save the galaxy"}, {"id": "518a904e7c2fce1516b8f9da", "title": "Do a barrel roll"}]、status -- 200 および error -- parsererror が返されます。

4

2 に答える 2

2

あなたの js コンテンツ ネゴシエーションにエラーがあると思います

それ以外の

dataType: "json",

使用する

contentType: 'application/json',

または、このフィールドなしで試してください

于 2013-05-10T07:44:42.973 に答える