2010-02-03 10 views
1

Je suis en train de passer une chaîne comme ceci:Passer une chaîne d'objet à une fonction javascript

{"key":["value"],"key2":undefined,"key3":undefined,"key4":undefined,"key5":"value"} 

à une fonction javascript comme ceci:

<a href="#" onClick="myFunction(myString);"> 

mais ne peut pas obtenir l'échappement droit. Y at-il un moyen de passer cette chaîne d'objet à une fonction ou dois-je convertir quelque chose?

Salutations, Select0r

Répondre

1

essayer:

var myString = '{"key":["value"],"key2":undefined,"key3":undefined,"key4":undefined,"key5":"value"}'; 


EDIT:

À la lumière de votre commentaire récent, je suis retourné au navigateur et essayé ceci (fonctionne pour moi):

<a href="#" onClick="myFunction({'key':['value'],'key2':undefined,'key3':undefined,'key4':undefined,'key5':'value'});"> 

La modification signifie qu'elle n'est plus transmise en tant que chaîne mais en tant que paramètre d'objet à myFunction.

+0

J'ai essayé cela avant et cela n'a pas fonctionné: j'obtiens une erreur "littéral de chaîne non terminée". Le problème est que Javascript ne sera pas exécuté dans ce contexte (spécial Dojo-template, IE6 ignore Javascript ici) et comme tout Javascript doit aller dans le "onclick", il y a déjà des guillemets qui provoquent l'erreur. – Select0r

+0

Merci, je suppose que cela fonctionnerait pour moi si je pouvais seulement effectuer un str.replace sur myString avant de le passer à myFunction. myString est passé par une requête AJAX et je ne peux pas changer le résultat, donc je suis bloqué avec myString tel qu'il est, donc ma seule chance est probablement une approche différente dans la génération des données en premier lieu ... – Select0r

1

Comme l'a dit Naeem, vous pouvez placer la chaîne entre guillemets. La différence entre la citation simple et double est le suivant:

guillemets simples:

  • Peut contenir des guillemets doubles sans arrêter la chaîne
  • ne peut pas contenir des caractères tels que des lignes de rupture
  • Peut contenir des guillemets simples via \'

guillemets doubles:

  • peut contenir des guillemets simples sans chaîne arrêter
  • Peut contenir la ligne de rupture et d'autres caractères spéciaux
  • Peut contenir des guillemets doubles via \"
+0

Je ai juste trop de guillemets :) Le code ressemblera à quelque chose comme: onclick = "myFunction ('{key" ... alors que les dernières citations appartiennent à la chaîne et met fin à l'onclick-citation Comme je l'ai commenté plus haut: dans cette spéciale contexte, tout Javascript doit être dans l'onclick - maintenant je n'ai aucune idée, si c'est possible du tout – Select0r

0

Si vous pouvez générer le code juste avant cet élément <a>, vous pouvez essayer ceci:

<script type="text/javascript"> 
var myObj = {"key":["value"], "key2":undefined, "key3":undefined, "key4":undefined, "key5":"value"}; 
</script> 
<a href="#" onClick="myFunction(myObj)"> 
+0

IE6 ignore Javascript dans ce contexte complètement, donc je ne peux pas aller avec cette solution – Select0r

1

J'ai trouvé une solution, Naeem Sarfraz m'a mis sur la bonne voie - il ne va pas gagner une beauté co ntest, mais ça marche:

Comme je peux exécuter PHP dans le contexte dans lequel je suis (mais IE6 ignorait Javascript), j'ai fait quelques remplacements sur des guillemets simples/doubles avec PHP.

$data = stripslashes(unserialize($data)); 
$data = addcslashes($data, "'"); 
$data = str_replace('"', "'", $data); 

Cela supprime tous les barres obliques, ajouter des barres obliques pour des guillemets simples seulement et, enfin, remplacer les guillemets doubles avec les simples.

Maintenant myString est dans un état qui peut être transmis à une fonction Javascript dans onclick sans citer-conflits:

<a href="#" onClick="myFunction(<?php print $data; ?>);"> 

Merci pour vos contributions!

+0

Nice one, content d'être de l'aide –

+0

Un truc que j'ai utilisé dans le passé est de mettre une chaîne JSON dans un élément invisible.Vous pouvez ensuite utiliser onclick = "myFunction (eval ($ ('# myDiv') .html()))". .. Je ne suis pas sûr si cela rend plus facile ou plus difficile pour votre implémentation (aussi, l'exemple nécessite jQuery). – Mike

+0

Je suppose que je m'en tiens à mes remplacements pour l'instant, mais je garderai cela à l'esprit, merci. Je ne travaille pas avec jQuery mais avec Dojo, donc une implémentation similaire à la vôtre ne devrait pas être un gros problème. – Select0r

Questions connexes