Comment encoder une fonction JavaScript dans PHP? Je veux coder la fonction de rappel avec le tableau équivalent INI JavaScript: p> Je sais que mon code PHP est faux, comment puis-je Fixez-le? P> P>
8 Réponses :
Vous avez oublié la virgule entre "titre" et "fncallback" p>
Oups, je suis désolé, mais ce n'est pas le problème. Somecallback est illégal dans PHP mais pas dans JS.
ouais je suppose que json_encode peut faire référence à la fonction mais je me trompe voir @mario
JSON est pour passer des valeurs qui ne conviennent pas pour passer des morceaux de code. P>
Vous pouvez plutôt passer un nom de fonction ou une autre valeur significative et récupérer la fonction correcte à l'appeler sur le côté JavaScript. P>
Sinon, je résoudrai que en retournant une chaîne, mais cela ne fait pas que le code n'est pas "propre" $ retourvalue = "{" Titre ":" Titre "," Fncallback ": Somecallback}";
Ne confondez pas JSON pour la syntaxe de notation d'objet JavaScript réelle, native, JavaScript (quel que soit le nom). Les objets JavaScript peuvent contenir des références de fonction; JSON ne peut pas. P>
Pour que l'avis disparaisse en PHP, écrivez simplement votre fonction de rappel dans des guillemets: puis lorsque vous recevez le JSON en JavaScript, vous pouvez remapper le nom de la fonction de rappel à la Fonction JS réelle avec par exemple: p>
Ce n'est pas possible sans penser à une convention et à la mettre en œuvre vous-même.
dire, vous avez ce json p> alors vous pouviez faire, du côté du client P> et appelez celui-ci dans le contexte d'un objet qui fournit vos fonctions de rappel p> Quelles manquent: P > Ajoutez ces fonctions par vous-même, aucune de ces informations ne doit être difficile à mettre en œuvre. p> p>
"* rappel" code>. Li>
Viola j'ai résolu mon problème avec Zend_Json Encoder
$options = array( 'title' => 'Title', 'fnCallback' => new Zend_Json_Expr('someCallback') ); Zend_Json::encode( $options, false, array('enableJsonExprFinder' => true));
Super de voir une utilisation réelle de ZF ;-). Je suis allé laid et élégant en ajoutant dans le tableau PHP 'Data' => '@ acallback () @' et après JSON_ENCODE avant la sortie, STR_REPLACE ('"@" ",' ') . Php4ever.
XXX PRE>
VOICI LE RÉULTAT: P>
<script> var oTest = { "Numeric":1, "string":"hello world !", "myFunction":function(test) { if (test==1) { alert('myFunction(1)'); return true; } else return false; }, "myObject":{ "Numeric":1, "string":"hello world !", "myFunction":function(test) { alert('myFunction(1)'); return true; } } }; if (oTest.myFunction(0) == false) alert('myFunction(0)'); if (oTest.myObject.myFunction(1) == false) alert('myFunction(0)'); </script>
J'ai aimé l'idée dans Ce commentaire , donc j'ai développé sur elle.
Ceci utilise une carte d'identité unique pour le remplacement, de sorte qu'il est peu probable d'avoir des conflits de caractère ou des remplaçants accidentels. Vous pouvez également utiliser un GUID . P>
$config = <<<EOF { foo: "bar", callback: function(value){return'$'+value+(value?'K':'');} } EOF;
JSON ne permet que des valeurs. Vous ne pouvez pas faire référence à un objet de fonction avec elle. Vous pouvez uniquement fournir le nom de la fonction en tant que chaîne, puis gérer la résolution dans JavaScript (à l'aide d'une carte ou de quelque chose).
Qu'est-ce que
Somecallback code> est censé être? Une constante? Parce que seules les constantes peuvent être des références comme ça.
Je suppose que
Somecallback code> est une fonction de rappel.
@Gumbo Somecallback est une fonction JavaScript.
@Mario hmmm il y a un sens. Thx Mario