2012-08-13 8 views
0

Je veux savoir comment je peux correctement retourner les données de la JSON suivante: faire semblant que j'ai une url http://test.com/tesdata qui me donne les données suivantes:comment obtenir JSON d'un tableau

[{"Identifier":1, "Name":"Test"}, 
{"Identifier":2, "Name":"Test"}, 
{"Identifier":3, "Name":"Test"}] 

Alors je l'ai fait la ci-dessous pour obtenir ces données dans un div:

   $.ajax({ 
    type: 'GET', 
    url: 'http://notgiven', 
    data: { get_param: 'value' }, 
    dataType: 'json', 
    success: function (data) { 
     alert("s"); 
     $.each(data, function(index, element) { 
      $('.result').append("a"); 
     }); 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
     alert("jqXHR: " + JSON.stringify(jqXHR)); 
     alert("textStatus: " + JSON.stringify(textStatus)); 
     alert("errorThrown: " + JSON.stringify(errorThrown)); 
    } 
}); 

et je reçois l'erreur suivante Impossible d'analyser la chaîne JSON

+0

jusqu'où êtes-vous allé? où se produit l'erreur? –

+1

Test: 'element.Identifier + '' + element.Name' –

+1

Il y a un'} 'supplémentaire dans le tableau. – undefined

Répondre

-1

Vous devez appeler la fonction JSON.parse avant toute opération sur des données JSON avec js.

$.ajax({ 
     type: 'GET', 
     url: 'http://test.com/tesdata', 
     data: { get_param: 'value' }, 
     dataType: 'json', 
     success: function (data) { 
      var items = JSON.parse(data); 
      $.each(items, function(index, element) { 
       $('.result').append(element.Id + " " + element.Name); 
      }); 
     } 
     }); 

Pour IE 6 et 7, vous devez inclure le fichier json2.js pour la prise en charge de la fonction JSON.parse.

+1

Le paramètre 'dataType' spécifie explicitement à jQuery que la réponse doit être analysée en JSON avant de vous être transmise. En outre, jQuery a '$ .parseJSON' donc il n'y a pas besoin de json2.js – Esailija

1

Essayez ceci:

// create empty object 
var json = {}; 

$.each(data, function(index, element) { 
// for each element, create empty object 
json[index] = {}; 
// map response data to new json object 
json[index]['id'] = element.Identifier; 
json[index]['name'] = element.Name; 
}); 

la variable json contient maintenant toutes les informations au format JSON stocké pratique dans un objet javascript :)

enter image description here

Dans votre exemple, cela signifierait :

$.ajax({ 
    type: 'GET', 
    url: 'http://test.com/tesdata', 
    data: { get_param: 'value' }, 
    dataType: 'json', 
    success: function (data) { 

     var json = {}; 

     $.each(data, function(index, element) { 
     json[index] = {}; 
     json[index]['id'] = element.Identifier; 
     json[index]['name'] = element.Name; 
     // don't know exactly what you try to do here, but let's append this data to '.result' 
     $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

     }); 

    } 
}); 

S'il vous plaît noter que si tout ce que vous voulez est d'ajouter ces valeurs à certains div, il n'est pas nécessaire de faire toute la conversion json. Dans ce cas, vous pouvez juste faire

success: function (data) { 
       $.each(data, function(index, element) { 
       $('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>"); 

    }); 

}

+0

où insérer l'url ..? – bdz

+0

ok, voir modifier .... – tmaximini

+0

thnx, mais ne fonctionne pas, voir ma question je l'ai édité .. – bdz

0

Comme je l'ai suggéré dans les commentaires il est probablement une question transversale d'origine. Vous ne pouvez pas accéder aux données/scripts à partir d'une origine différente qui signifie même protocole (http/https) même domaine (mydomain.com) même port (par défaut habituels omis de: 80)

So origin of: http://localhost:8080/data != https://localhost:8080/data 
    origin of: http://mydomain.org/data != http://localhost/data 
    origin of: http://mydomain.org/data != http://localhost/data 
    origin of: http://localhost/data  == http://local 

hôte/somethingelse

Pourtant, je ne suis pas sûr à 100%. Mais une première étape dans la résolution du problème est bon débogage.

Il est possible de debug using xcode Mais si vous voulez essayer sans. Définir un gestionnaire d'erreur (check this fiddle)

Vous verrez que cela ne fonctionne pas à cause du problème d'origine croisée. (et c'est une url factice) Malheureusement, vous ne pouvez pas capturer ces erreurs d'origine croisée. Vous pouvez seulement les voir dans la console .. (au moins je n'ai pas pu encore)

Mais maintenant les bonnes nouvelles!

Les applications PhoneGap ne sont pas limitées à la politique d'origine croisée! Donc, s'il est déployé, le problème devrait être résolu.

Si vous avez accès au backend, j'ai aussi une solution facile pour cela.REMARQUE: pour le développement, cela ne devrait pas poser de problème, pour la production, je conseille de définir une URL fixe ou si nécessaire, supprimez-la.

EDIT: Il ne s'agit donc pas d'un problème d'origine croisée. comme l'erreur est survenue: Impossible d'analyser la chaîne JSON

Vous vérifiez donc ce qu'il y a dans la réponse jqXHR. Regardez les données brutes verify if it's valid. 95% de chance ce n'est pas parce que mon meilleur pari est le jquery json-parser qui est assez solide.

Questions connexes