2010-12-16 3 views
1

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

Вот мой JQuery на основе 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."); 
    }    
}); 

И мой взгляд Джанго, который обрабатывает этот АЯКС вызов, чтобы сохранить объекты 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.

+1

Я думаю, что последняя строка этого кода должна быть: возвращение HttpResponse («Не разрешено») – 2011-08-11 22:23:52

ответ

2

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

$.ajax({ 
    data: JSON.stringify(data), 
    processData: false, 
    contentType: 'application/json', 
    // other options 
    } 
1

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

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

root = request.POST 
Смежные вопросы