2010-06-21 6 views
0

J'utilise le plugin jQuery formulaire Ajax pour obtenir JSON à partir d'un serveur:jQuery: JSON converti d'un objet en chaîne?

/** 
* Helper function for the jQuery AJAX form plugin. 
*/ 
function bindOnSuccess(form, callback) { 
    form.ajaxForm({ 
     dataType: 'json', 
     success: function (response, status, xhr, $form) { 
      callback(response); 
     } 
    }); 
} 

Utilisation:

bindOnSuccess($('#course-search'), function(response) { 
    if (!response) { 
     $("#system-status").text("Sorry, no course could be found for that search."); 
    } 
    else { 
     $(".dept-code").text(response['course']['_dept_code']); 
     $(".course-number").text(response['course']['_number']); 
     $(".course-title").text(response['course']['_title']); 

     $("#div-unparsed-pre-reqs").show(); 
     $("#unparsed-pre-reqs-teaser").show(); 
     $("#unparsed-pre-reqs").text(response['course']['_unparsed_pre_reqs']).hide(); 

     $("#td-required-for").text(response['analysis']['cRequiredFor']); 

     loadNewJson(response['graph']); 
    } 
}); 

Le JSON est correctement eval'd. Cependant, une partie me surprend:

{"course": { 'foo': 'bar', /* data */}, 
"analysis": { 'baz': 'odp', /* data */}, 
"graph": "[{\"adjacencies\": [], \"id\": 2539, \"name\": \"BEE 3310: Bio-Fluid Mechanics\"}, {\"adjacencies\": [{\"nodeTo\": 2539, \"data\": {\"$direction\": [3332, 2539]}}], \"id\": 3332, \"name\": \"UNKNOWN 9999: UNKNOWN\"}]"} 

Pourquoi est-ce que response['course'] et response['analysis'] obtenir parsé, mais response['graph'] reste une chaîne?

MISE À JOUR: Je viens de l'essayer à nouveau, et cela a fonctionné. Je ne suis pas sûr d'avoir changé quoi que ce soit. Impair.

Le code du serveur (Python) ressemble à ceci:

result = {'course': dict_course, 'analysis': analysis, 'graph': jit_graph_data} 
self.response.out.write(json.dumps(result)) 
+0

Votre code serveur ressemble à quoi? –

Répondre

0

La seule façon que vous pourriez obtenir que la production est si jit_graph_data était déjà JSON, que ce soit parce qu'il a été codé quelque part plus tôt dans la conduite, ou parce que il n'a jamais été décodé lorsqu'il a été extrait de sa source.

0

Pour ajouter à Ignacio's answer, vous pouvez fixer votre code côté serveur pour utiliser ceci:

result = {'course': dict_course, 'analysis': analysis, 'graph': json.loads(jit_graph_data)} 
self.response.out.write(json.dumps(result)) 
+0

Oh, je n'ai pas lu la question complète, et vous l'avez déjà corrigée? Eh bien, je vais laisser ça ici de toute façon ... – icktoofay

Questions connexes