2009-12-10 6 views
0

lors de la soumission de mon formulaire à l'aide du plugin formulaire jQuery, la requête reçue par la vue cible est différente de celle reçue lorsque le formulaire est soumis de manière standard (sans javascript), mon modèle Django ne s'affiche pas comme prévu. Lorsqu'il est soumis de la manière standard, le modèle génère les erreurs de formulaire (le "formulaire. [Nom_zone] .errors), mais pas lors de la soumission via javascript." En utilisant le javascript, comment puis-je obtenir une requête permettant rendre le modèle tel n'utilisant la norme soumettre le code et la diff entre les objets demande reçue dans les deux cas sont présentés ci-dessousProblème avec le formulaire Django lors de la soumission du plugin formulaire jQuery

grâce juillet

code javascript:.

var is_geocoded = false; 
var interval; 

$(function(){ 

    $("#submit").click(function() { 
     var options = { 
      beforeSubmit: getPosition, // pre-submit callback 
      success:  showResponse // post-submit callback  
     }; 

     // bind form using 'ajaxForm' 
     $('#addresto').ajaxForm(options); 
    }); 

}); 

function getPosition() { 

    var geocoder = new GClientGeocoder(); 
    var country = $("#id_country").val(); 
    var city = $("#id_city").val(); 
    var postal_code = $("#id_postal_code").val(); 
    var street_number = $("#id_street_number").val(); 
    var street = $("#id_street").val(); 
    var address = street_number+", "+street+", "+postal_code+", "+city+", "+country; 

    geocoder.getLatLng(address, function(point) { 

     if (point) { 

      $("#id_latitude").val(point.lat()) 
      $("#id_longitude").val(point.lng()) 
      is_geocoded = true; 
     } else { 
      is_geocoded = true; 
     } 
    }); 

    interval = setInterval("doSubmit()", 500); 

    return false; 
} 

function doSubmit() { 

    if (is_geocoded) { 
     $("#addresto").ajaxSubmit(); 
     clearInterval(interval); 
    } 
} 

Django modèle morue e:

<form id="addresto" action="" method="POST"> 

<p><label for="id_name">Name:</label>{{form.name.errors}} {{ form.name }} </p> 
<p><label for="id_country">Country:</label>{{form.country.errors}} {{ form.country }} </p> 

<!-- more stuff --> 

<p style="clear: both;"><input type="Submit" id="submit" value="Submit" /></p> 
</form> 

est ici la différence entre les demandes reçues par la vue à la norme soumettre et javascript soumettre:

[email protected]:~$ diff javascript_submit standard_submit 
7c7 
< 'CONTENT_TYPE': 'application/x-www-form-urlencoded; charset=UTF-8', 
--- 
> 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 
24c24 
< 'HTTP_ACCEPT': '*/*', 
--- 
> 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
28d27 
< 'HTTP_CACHE_CONTROL': 'no-cache', 
33d31 
< 'HTTP_PRAGMA': 'no-cache', 
36d33 
< 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest', 
70c67 
< 'wsgi.input': <socket._fileobject object at 0x891d064>, 
--- 
> 'wsgi.input': <socket._fileobject object at 0x898b09c>, 

Répondre

4

La raison pour laquelle les erreurs ne semblent pas lorsque vous soumettez via ajax est que vous aren rafraichir la page.

Vous devrez renvoyer json ou xml à votre javascript et insérer les erreurs dans la page de cette façon.

Vous pouvez aussi simplement rendre le formulaire à un blob de html et écrasez la forme actuelle sur la page (mais cela est un peu plus compliqué et n'est pas aussi efficace)

essentiellement je reccomende juste en utilisant des années djangométhode pour déterminer si le formulaire est soumis avec ajax, et renvoyer json pour les requêtes ajax

+0

+1 bien que je préfère personnellement donner aux requêtes ajax un espace de noms d'URL différent, peut-être juste en mettant 'json' dans le chemin quelque part. – SingleNegationElimination

+0

Merci pour les conseils. Comme je n'ai pas vraiment besoin d'ajax ici, je vais juste utiliser javascript, pour ne pas avoir à changer d'avis. – jul

Questions connexes