2010-06-29 8 views
0

Je suis un peu coincé avec la situation suivante:Jquery appel Ajax avec django

J'utilise un appel ajax soumettre un formulaire, j'utiliser les valeurs de formulaire pour faire une « requête » dans django. Lorsque cela s'est produit et j'ai obtenu le bon jeu de requête, il me délivre une réponse HttP sous la forme d'un CSV. J'ai mis en place les en-têtes et toutes les choses nécessaires pour obtenir la fenêtre 'enregistrer le fichier sous' ... malheureusement, cela n'arrive pas parce que l'appel ajax place la réponse dans un div.

Voici le code:

if (vsc=='True'){ 
    ajax_loader(); 
// add pdf, csv $.ajax (todo) 
     $.ajax({ 
    type: "POST", 
     url: "./test", 
      dataType: 'text', 
    success: test, 
    data: {host: ho, log: lo, severity: se, datetimestart: dts, datetimeend: dte, enabled: ena, csv: vsc, pdf: fdp} 

     }); 

donc dans cette fonction ajax un appel la ./test url. À l'intérieur de cette URL, je fais un filtrage d'objet et je fais un objet de réponse http et le renvoie. En cas de succès, je voudrais arriver à "enregistrer le fichier sous", mais en ce moment je n'ai aucune idée de la façon de le faire. J'ai réussi à montrer la réponse dans un div sur ma page html ./test mais le 'save file as' n'apparaît jamais.

Mon vue django:

def export_csv(request,queryset) 
# do some filtering on queryset and create a csv 
response = HttpResponse(''.join(csv_export), mimetype='text/csv') 
response['Content-Disposition'] = 'attachment; filename=customreportexport.csv' 
return response 

Ceci est mon avis, tout devrait être normal, je pense qu'il est vraiment appel ajax ... sur le « succès » que je dois faire quelque chose il popups comme « sauver fichier comme ', seulement je ne sais pas comment. J'ai déjà essayé un iframe aussi mais que je dois donner la 'source' comme url et ce n'est pas possible car l'appel ajax fait le post des paramètres etc ... aucune aide sur ceci? Auparavant, je savais qu'il y avait quelque chose dans une langue appelée « IsUpload = true », dommage que ce n'est pas jquery ajax ....

l'espoir d'entendre de vous les gars

+0

semble que vous n'acceptez pas un conseil! – jAndy

+0

qui conseille? – Thomas

+1

Il signifie que vous avez posé 6 questions sur ce site et que vous n'avez pas accepté les réponses fournies. La mécanique et la courtoisie implicite sur le site est que vous devriez accepter la meilleure réponse correcte à vos questions, s'il y en a qui peuvent être considérées comme correctes. – Greg

Répondre

3

Il semble que cela ne devrait pas être une requête Ajax - si vous venez de poster ce formulaire, l'utilisateur ira à l'URL de csv et sera invité à télécharger le fichier.

+0

il ne sera pas ... je clique sur soumettre sur mon formulaire ... ma vue voit qu'il doit produire un csv, il renvoie un objet HTTPResponse mais il n'ouvre pas 'enregistrer le fichier sous', comment le faire? Cela doit être possible dans jquery/ajax, c'était possible dans ExtJS ... Pourriez-vous me donner un exemple de comment le faire en sachant que les valeurs POST (paramètres) pourraient être des tableaux différents car ce sont des "select boxes" ... – Thomas

+0

shreddies a raison. Ajax est complètement hors de propos et inutile ici. –

+0

ce n'est pas ... mon contenu est réfractaire à l'intérieur d'une page ... je soumets le même formulaire qu'une case à cocher confirme pour un csv ou non. Quand je renvoie la réponse, elle sera renvoyée à un appel ajax donc pas à un lien externe ... donc ce n'est pas hors de propos. J'ai fait une solution pour cela, je fais juste un fichier temporaire et fais un appel ajax avec un iframe sur le lien du fichier temporaire ... c'est la seule façon dont cela pourrait fonctionner dans mon cas. Dommage que jquery manque quelque chose comme IsUpload = True comme dans ExtJS – Thomas

Questions connexes