2010-12-16 2 views
1

via ajax, je veux poster des données et si le modèle est enregistré avec succès, renvoie la réponse en tant qu'objet JSON.Django et Ajax basés sur l'enregistrement du modèle

Voici mon jquery base ajax message:

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

Et moi Django qui gère cet appel ajax pour enregistrer des objets iEventPlan et la réponse de retour:

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.") 

Ceci est l'erreur que je reçois:

JSONDecodeError at /my-ajax-url/ 

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

Ce que je fais mal? Je serai reconnaissant si vous me montrez la manière appropriée de manipuler des économies et des réponses de modèle de django basées par ajax.

+1

Je pense que la dernière ligne de ce code doit être: return HttpResponse («Non autorisé ») –

Répondre

2

Vous envoyez des données POST dans le formulaire standard de codage. L'attribut dataType ne spécifie pas le type de données à envoyer, mais celui que vous attendez reçoit. Si vous voulez vraiment envoyer JSON à partir de votre navigateur, vous devez faire quelque chose comme ceci:

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

La fonction .ajax() de jQuery ne publie pas de données en tant que JSON brut. Il utilise le format standard codé en forme (le paramètre dataType consiste à déterminer le format attendu pour la réponse à partir du serveur).

Ainsi, au lieu de l'appel json.loads(), vous devez simplement faire:

root = request.POST 
Questions connexes