2008-09-17 29 views
10

J'ai déterminé que mon JSON, provenant du serveur, est valide (en effectuant l'appel ajax manuellement), mais j'aimerais vraiment utiliser JQuery. J'ai également déterminé que l'URL "post", étant envoyée au serveur, est correcte, en utilisant firebug. Cependant, le rappel d'erreur est toujours déclenché (parsererror). J'ai aussi essayé le type de données: texte.Impossible de recevoir JSON à partir de l'appel AJAX JQuery

Y a-t-il d'autres options que je devrais inclure?

$(function() { 
    $("#submit").bind("click", function() { 
     $.ajax({ 
      type: "post", 
      url: "http://myServer/cgi-bin/broker" , 
      datatype: "json", 
      data: {'start' : start,'end' : end}, 
      error: function(request,error){ 
       alert(error); 
      }, 
      success: function(request) { 
       alert(request.length); 
      } 
     }); // End ajax 
    }); // End bind 
}); // End eventlistener 

Répondre

19

Voici quelques suggestions que je voudrais essayer:

1) l'option 'datatype' que vous avez spécifié doit être 'dataType' (sensible à la casse je crois)

2) essayez d'utiliser l'option « contentType » comme si:

contentType: "application/json; charset=utf-8" 

Je ne sais pas combien cela va aider comme il est utilisé dans la demande à l'url de votre poste, pas dans la réponse. Voir cet article pour plus d'informations: http://encosia.com/2008/06/05/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax (Il est écrit pour asp.net, mais peut être applicable)

3) Triple vérifier la sortie de l'url de votre poste et exécuter la sortie par un validateur JSON juste pour être absolument sûr c'est valide et peut être analysé dans un objet JSON. http://www.jsonlint.com

Espérons que cela aide!

+0

merci beaucoup d'avoir pris le temps de répondre. c'était l'option dataType que j'avais en tant que type de données –

+7

Juste une note, en définissant dataType à "json" définit automatiquement le contentType à "application/json". – bhollis

+0

@BHR +1 correct selon les docs. Cependant, peut-être utile de noter: Je travaille avec jquery 1.6.4 atm et j'ai trouvé que j'ai besoin de définir explicitement contentType: "application/json; charset = utf-8" – zack

0

Le paramètre de données est incorrect. Voici un exemple qui fonctionne:

données: {index: ddl.selectedIndex},

Ce contructs un objet avec index appelé la propriété avec une valeur ddl.selectedIndex.

Vous devez supprimer les guillemets de votre ligne de paramètres de données

Bonne chance Un

+0

-1, il est parfaitement valide pour avoir une syntaxe chaîne en tant que nom de propriété. Dans certaines situations, c'est un must, par exemple quand vous avez un nom de propriété qui ne serait pas un nom d'identifiant valide en javascript, le céder vous permettra de lui donner une valeur de toute façon. Un exemple courant est '' class '', qui doit être cité car il s'agit d'un mot réservé. Dans la syntaxe JSON, il est même obligatoire d'entourer tous les noms de propriété entre guillemets. – DarthJDG

1

Pourquoi myResult au lieu de request?

success: function(request) { 
       alert(myResult.length); 
      } 
+0

Je suis à peu près sûr que dans mon code complet, je manipulais request dans myResult .... mais je l'ai changé pour que ce soit plus clair ... le problème était que dataType était épelé en tant que 'type de données'. Merci pour le commentaire –