2010-04-03 2 views
0

Mon code js obtient simplement un objet json de mon serveur, mais je pense qu'il devrait être automatiquement analysé et transformé en un objet avec des propriétés, mais il ne permet pas l'accès correctement.Pourquoi mon json-object d'AJAX n'est-il pas compris par javascript, même avec 'json' dataType?

$.ajax({ 
     type: 'POST', 
     url: '/misc/json-sample.js', 
     data: {href: path}, // THIS IS THE POST DATA THAT IS PASSED IN; safe2ignore. 
     dataType: 'json', 
     success: function (datax) { 

    if (datax.debug) { 
    alert('Debug data: ' + datax.debug); 
    } else { 
     alert('No debug data: ' + datax.toSource() ) ; 
     } 

Le fichier est /misc/json-sample.js: [{ "chemin": "examplemodule/Parent1/child1/grandchild1", "title": "Première option petit-enfant", "debug": " première option petit-enfant », "enfants": faux}]

(j'ai aussi essayé de revenir de cet objet comme suit drupal, et les mêmes résultats.) Version Drupal mISC/JSON-sample.js:

Qu'est-ce qui se passe (dans FF, qui a la capacité toSource()) est l'alerte avec 'Pas de données de débogage: [{path: "ex amplemodule/parent1/child1/petitchild1 ", titre:" Option premier petit-enfant ", debug:" Option premier petit-enfant ", enfants: false}] ' Merci
+0

Je suis confus, vous attendez le champ de débogage dans votre objet retourné de Drupal, mais vous n'avez pas ce champ dans '/ Divers/JSON-sample.js'? Cela fonctionne-t-il si vous ajoutez le champ à votre fichier js codé en dur? –

+0

Désolé, j'ai posté par erreur la mauvaise version du fichier json-sample.js et la sortie d'alerte. J'ai réparé ça. – pete

Répondre

2

Vous devez définir l'en-tête Content-Type sur application/json .

header("Content-Type: application/json"); 
print drupal_to_js($items); 
+0

Merci. J'ai testé le changement recommandé par Michael dans la version drupal. Il semble que cette directive fasse maintenant partie de l'en-tête, comme quand je charge l'URL directement depuis localhost comme/ra/js alors FF me demande "que FF devrait faire avec cette application/json" - MAIS l'application jquery ne le fait toujours pas analyser les résultats correctement et la même alerte est appelée. – pete

+0

Je pense que je l'ai. [{"path": "exemplemodule/parent1/child1/petitchild1", "title": "Première petite-fille", "debug": "Première petite-fille", "enfants": false}] est un tableau d'objets! Sans le [], le .js dummy-filed a été correctement analysé. Par conséquent, je me réfère probablement au .debug faux, car ce n'est pas un élément de la liste mais un élément du premier élément de la liste. – pete

Questions connexes