2010-10-08 2 views
2

J'utilise Google App Engine (Python) avec jQuery pour les appels Ajax au serveur. J'ai une page où je veux charger une liste de chaînes dans Javascript d'un appel d'Ajax au serveur.Comment retourner et utiliser un tableau de chaînes à partir d'un appel jQuery ajax?

La méthode du serveur que je veux invoquer:

class BrowseObjects(webapp.RequestHandler): 
    def get(self): 
     ids_to_return = get_ids_to_return() 
     // TODO: How to return these ids to the invoking ajax call? 
     self.response.out.write(ids_to_return) 

La page HTML où je veux être en mesure d'accéder aux ids retournés:

var strings_from_server = new Array(); 

    $.ajax({ 
     type: "GET", 
     url: "/get_ids.html", 
     success: function(responseText){ 
      // TODO: How to read these IDS in here? 
      strings_from_server = responseText     
     }, 
      error: function (xhr, ajaxOptions, thrownError){ 
      alert(xhr.responseText); 
     } 
    }); 

Mon expérience avec l'Ajax est limited-- I Je les ai seulement utilisées pour stocker des données sur le serveur (commandes POST a-la) et je n'ai donc aucune idée de la façon de récupérer les données du serveur. Merci à l'avance pour tous aider

Edit: Ma réponse finale:

Je suis passé à un appel complet Ajax (pour éviter des demandes inter-domaines) et aussi pour gérer callbacks « erreur ». Ma méthode client de travail ressemble à:

  $.ajax({ 
      type: "GET", 
      dataType: "json", 
      url: "/get_ids.html", 
      success: function(reponseText){ 
       strings_from_server = responseText     
      }, 
      error: function (xhr, ajaxOptions, thrownError){ 
        alert(xhr.responseText); 
      } 
     }); 

note Je spécifie le dataType en tant que 'json'.
Et ma dernière fonction du serveur, avec la réponse de Sahid, ressemble à:

class BrowseObjects(webapp.RequestHandler): 
    def get(self): 
     ids_to_return = get_ids_to_return() 
     # Note: I have to map all my objects as `str` objects 
     response_json = simplejson.dumps(map(str, ids_to_return)) 
     self.response.out.write(response_json) 

Merci à tous!

+3

Découvrez fonction jQuerys getJSON. Il vous permet d'analyser automatiquement la réponse en tant que données JSON. http://api.jquery.com/jQuery.getJSON/ –

+0

à quoi ressemble la réponse? – Reigel

Répondre

3

Ce n'est probablement pas la solution la plus propre, mais cela fonctionnera. Comme ce ne sont que des identifiants, il semble que vous pouvez les insérer directement dans une chaîne.

class BrowseObjects(webapp.RequestHandler): 
    def get(self): 
     ids_to_return = get_ids_to_return() 

     response_html = '["' 
     response_html += ids_to_return.join('","') 
     # Edit: since my ids are Key objects (not strings) 
     # I had to use the following instead: 
     # response_html += '","'.join(map(str, ids_to_return)) 
     response_html += '"]' 

     self.response.out.write(response_html) 

et

var strings_from_server = new Array(); 

$.getJSON("/get_ids.html", function(responseData){ 

    strings_from_server = responseData; 

}); 

Vous pouvez vérifier si la réponse était vide Incase d'une erreur, et vous pouvez utiliser .each $ à boucle à travers les résultats. J'utilise la fonction jQuerys getJSON pour analyser la réponse automatiquement. Comme je ne fais que renvoyer une liste json, elle va générer le tableau de données dans la variable strings_from_server.

+0

Cela a fonctionné parfaitement. J'ajoute un commentaire à l'intérieur de la réponse parce que j'avais tort - mes identifiants ne sont pas des chaînes afterall, ils sont un type d'objet. Votre solution fonctionne très bien, merci! – Cuga

+0

Heureux que ça a marché et que tu comprennes ce que j'ai fait. Si vous trouvez comment ajouter un déclencheur d'erreur dans cet appel getJSON, veuillez le poster ici. Je serais curieux de voir à quoi cela ressemble. –

+0

Je ne suis pas sûr, mais en lisant ici http: // api.jquery.com/jQuery.ajax/ Je pense que vous pourriez faire un appel ajax régulier avec jQuery et spécifier JSON comme type de retour. Comme il s'agit d'un appel reg ajax, il vous permet de gérer l'erreur en spécifiant le rappel d'erreur. – Cuga

6

Le SDK de Google App Engine fourni par django la lib "simplejson".

from django.utils import simplejson

Donc, votre gestionnaire peut-être simplement:

from django.utils import simplejson 
class BrowseObjects(webapp.RequestHandler): 
    def get(self): 
     ids_to_return = get_ids_to_return() 
     response_json = simplejson.dumps (ids_to_return) 
     self.response.out.write(response_json) 

Il y a un bon article sur ajax/rpc: http://code.google.com/appengine/articles/rpc.html

+0

Merci, je vais déf. utiliser ceci =) – Cuga

+0

Je n'étais pas au courant que le moteur de l'application supportait simplejson. Merci! –

Questions connexes