2010-12-15 48 views
1

hey les gars, j'ai lu This post, donc ce que j'ai obtenu est JSON est le moyen le plus facile de traduire un objet JavaScript dans un tableau ou un objet associatif PHP/C# (et vice- versa).Pourtant, je trouve difficile à comprendre JSON

Maintenant, ma question est ce qui s'passe dans le code ci-dessous, à savoir sans JSON/XML je suis toujours accès à mon C objet # en Javascript, peut-être je me trompe, si oui S'il vous plaît me corriger:

C#

Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView 
    { 
     strItems &= "'" & dr("ItemTitle") & "'," //strItems is a String 
    } 
    strItems = strItems.Trim(",") 

Javascript: J'utilise ici Autocomplete.js en utilisant JQuery

function InitAutocomplete() 
    { 
     data = [<%=strItems %>].sort(); 
     AutoComplete_Create('<%=txtItem.ClientId %>', data); 
    } 

Voir J'utilise strItems en javascript avec servertag, alors où exactement le JSON est utilisé? Est-ce que .net fait quelque chose en interne? Je suis totalement confus comment JSON/XML est utilisé pour le passage des données?

Répondre

2

Alors que vous pouvez données passe comme cela sans l'aide JSON, il n'a pas assurer que toutes les données est sûr de passer, par exemple Tags </script> intégrés. L'utilisation de JSON encodera vos données d'une manière qui empêche cela, et vous le décoderez du côté JavaScript, par exemple. json2.js.

+0

Ok Alors, seulement pour des raisons de sécurité, JSON est utilisé? – FosterZ

+0

En fait, il est rarement utilisé pour cela. Beaucoup de gens injectent les données directement dans le JavaScript comme vous l'avez fait, ce qui a des implications sur la sécurité et l'intégrité. –

+0

pouvez-vous s'il vous plaît expliquez-moi comment cette méthode i.e injection de données directement dans JavaScript est non sécurisé, je wana juste savoir comment cette méthode peut parfois échouer? – FosterZ

1

Vous n'utilisez pas vraiment JSON dans quelque chose ici. Vous générez simplement un tableau de chaînes pour javascript et l'utilisez d'une manière simple et directe.

Si vous souhaitez transformer le JSON en objet (s) JavaScript, vous devez modifier votre programme et vous avez besoin d'un analyseur JSON. Il existe plusieurs implémentations d'analyseurs JSON, mais vous avez mentionné jQuery pour que vous puissiez utiliser: http://api.jquery.com/jQuery.parseJSON/

L'analyse avec jQuery requiert toutefois que votre JSON soit strictement formaté (à partir de la version 1.4). Voir http://json.org/ sur le bon formulaire. Fondamentalement dans votre situation, vous devriez mettre des guillemets autour de vos chaînes et mettre le tableau entier entre crochets.

Vos résultats devraient être quelque chose comme ceci:

strItems = '[' 
Foreach(DataRow dr in dvItems.Table.Rows) //dvItems is a DataView 
{ 
    // TODO: Escape dr("ItemTitle") so it conforms to http://json.org/ => String 
    strItems &= "\"" & dr("ItemTitle") & "\"," //strItems is a String 
} 
strItems = strItems.Trim(",") 
strItems &= ']' 

<script type="text/javascript"> 
    var jsonArr = <%=strItems%>; 
    var data = jQuery.parseJSON(jsonArr); 
    AutoComplete_Create('<%=txtItem.ClientId %>', data); 
</script> 
+3

Non, ce qu'il devrait faire est d'utiliser l'une des bibliothèques .NET pour la génération JSON. Générer JSON (ou n'importe quel format d'échange plus sophistiqué que le texte brut d'ailleurs) est un anti-pattern. –

+0

Je suis d'accord sur ce point. Les bibliothèques couramment utilisées et robustes devraient toujours être la première chose à rechercher des implémentations dans des occasions comme celle-ci. – heikkim

+0

et si j'utilise PHP alors, devrais-je générer JSON manuellement ou neother source est là, pour. Net il y a une bibliothèque pour la génération JSON et quoi pour PHP? – FosterZ