Сохранение моделей на основе Django и Ajax - PullRequest
2 голосов
/ 16 декабря 2010

через ajax, я хочу опубликовать некоторые данные и, если модель успешно сохранена, возвращает ответ в виде объекта JSON.

Вот мой пост на основе jjery ajax:

var requestData = { 'ievent_id': type , 'channel_id': CHANNEL_ID , 'start_date': dateToStrConverter(start_date) , 'end_date': dateToStrConverter(end_date) };
$.ajax({
    type: "POST",
    url: "my-ajax-url/",
    data: requestData,
    dataType: "json",
    success: function(data){
        console.log( "ID:" + data.plan_id + " Error:" + data.error);
    },
    error: function(msg){
        alert( "Theres an error with the server." );
    }              
});

Имое представление Django, которое обрабатывает этот вызов ajax для сохранения объектов iEventPlan и возврата ответа:

from django.utils import simplejson as json

def planner_save_view(request):
    if request.method == "POST" and request.is_ajax():
        root = json.loads(request.raw_post_data[0])

        ##data
        ievent = iEvent.objects.get(pk = root['ievent_id'])
        channel = Channel.objects.get(siservice = root['channel_id'])
        start_date = datetime.strptime(root['start_date'],'%d-%m-%Y %H:%M')
        end_date = datetime.strptime(root['end_date'],'%d-%m-%Y %H:%M')
        response_dict = {}
        try:
            plan = iEventPlan(red_button=ievent,channel=channel,start_date=start_date,end_date=end_date)
            plan.save()
            response_dict.update({'plan_id': plan.id})
        except:
            response_dict.update({'error': "theres a problem."})
        return HttpResponse(json.dumps(response_dict), mimetype="application/json")
    else:
        HttpResponse("Not authorized.")

Это ошибка, которую я получаю:

JSONDecodeError at /my-ajax-url/

No JSON object could be decoded: line 1 column 0 (char 0)

Что я делаю неправильно?Я буду признателен, если вы покажете мне правильный способ обработки сбережений и ответов на основе модели django на основе ajax.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Вы отправляете данные POST в стандартной форме кодировки. Атрибут dataType не указывает тип данных для отправки, но тот, который вы ожидаете получить , получает . Если вы действительно хотите отправить JSON из своего браузера, вам нужно сделать что-то вроде этого:

  $.ajax({
    data: JSON.stringify(data),
    processData: false,
    contentType: 'application/json',
    // other options
  }
1 голос
/ 16 декабря 2010

Функция .ajax() в jQuery не публикует данные в виде необработанного JSON.Он использует стандартный кодированный формат (параметр dataType предназначен для определения того, какой формат он ожидает от сервера ответ ).

Так что вместо вызова json.loads()Вы должны просто сделать это:

root = request.POST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...