2013-05-10 3 views
1

Я пытаюсь реализовать взаимодействие клиент/сервер с помощью Django и Ajax, и у меня возникла проблема с запросом Ajax.Django/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. Более того, если я помещаю этот вывод в файл и ссылаюсь на него в URL-адресе ajax, он работает так, как предполагалось.

P.S. Извините за мой английский.

UPDATE: Кроме того, когда я просматриваю детали ответа в FireBug, у него нет тела ответа.

заголовки отклика:

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

UPDATE: изменил 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.

+0

Вы должны использовать относительный URL-адрес, а не полный путь. Что-то вроде 'url:" customer/send-email/",'. –

ответ

1

Я думаю, что есть ошибка в вашем JS Content negotietion

вместо

dataType: "json", 

использование

contentType: 'application/json', 

или попробовать без этого поля

+0

Здравствуйте, спасибо за ответ. Тем не менее, не работает. Также попытался установить mimetype для приложения/json в представлении. Кстати, если это уместно, я использую fork Django 1.3 - Django nonrel для работы с MongoDB. – user2368822

+0

OK попробуйте успех: функция (данные) { предупреждение (данные); }, – speedingdeer

+0

Возможно, данные имеют значение null или sth, а функция ошибки выполнена – speedingdeer

1

Попробуйте return HttpResponse(serializer.data, content_type='application/json') в вашем Посмотреть.

И в вашем коде jQuery change type: "GET" и удалите dataType: "json".

Смежные вопросы