J'ai un appel getJSON qui échoue inexplicablement. L'idée est, vous cliquez pour soumettre un commentaire, une URL est frappée qui détermine si le commentaire est OK ou contient des mots coquins. La réponse est donnée sous forme JSON.Echec de getJSON, JSON valide
Voici le JS apparié qui génère l'appel. Le commentaire et l'URL sont déjà sur la page, il les saisit et frappe l'URL:
FORMULAIRE HTML:
<fieldset id="mg_comment_fieldset" class="inlineLabels">
<div class="ctrlHolder">
<textarea id="id_comment" rows="10" cols="40" name="comment"></textarea>
</div>
<div class="form_block">
<input type="hidden" name="next" value="" />
<input id="mg_comment_url" type="hidden" name="comment_url" value="" />
<input id="mg_comment_submit" type="submit" value="Remark" />
</div>
</fieldset>
SPECIFIQUE JS BLOC QUE ENVOIE/READS RÉPONSE:
$('input#mg_comment_submit').click(function(){
var comment = $("textarea#id_comment").val();
var comment_url = $('input#mg_comment_url').val();
$.getJSON(
comment_url+"?callback=?&comment="+comment+"&next=",
function(data){
console.log(data);
alert(data);
});
});
Le Réponse JSON:
[{"errors": {"comment": ["Weve detected that your submission contains words which violate our Terms and Conditions. Please remove them and resubmit test"]}}]
Il est renvoyé sous la forme d'un type d'application/json. Il valide dans JSONLint. J'ai également essayé d'ajouter quelques fonctions AJAX pour essayer d'attraper les erreurs, et ils sont tous les deux silencieux. Je peux voir la demande sortir dans Firebug, et revenir en tant que réponses de statut 200, qui valident dans JSONLint et que je peux traverser très bien dans l'onglet JSON de la réponse. Si je mets une alerte avant le getJSON, il s'exécute; c'est juste que rien à l'intérieur ne fonctionne. Je trouve également que si je change .getJSON en .get, les alertes s'exécutent, suggérant que c'est quelque chose avec le JSON. Je n'ai plus d'idées sur ce que pourrait être le problème. En utilisant Firefox 3.0.13.
Veuillez conserver vos adresses URI idempotentes. Même les ajax. Cela devrait utiliser '$ .post'. Lorsque vous ne le faites pas, c'est en fait une violation de la spécification HTTP http://www.w3.org/2001/tag/doc/whenToUseGet.html#safe –