Comment appeler une fonction JavaScript à partir de PHP?
comment appeler une fonction JavaScript à partir de PHP?
<?php
jsfunction();
// or
echo(jsfunction());
// or
// Anything else?
le code suivant est de xyz.html (sur le bouton) il appelle une wait()
en externe xyz.js . Ce wait()
appelle wait.php.
function wait()
{
xmlhttp=GetXmlHttpObject();
var url="wait.php";
xmlhttp.onreadystatechange=statechanged;
xmlhttp.open("GET", url, true);
xmlhttp.send(null);
}
function statechanged()
{
if(xmlhttp.readyState==4) {
document.getElementById("txt").innerHTML=xmlhttp.responseText;
}
}
et attendez.php
<?php echo "<script> loadxml(); </script>";
où loadxml()
appelle le code D'un autre fichier PHP de la même manière.
le loadxml()
fonctionne bien autrement, mais il ne s'appelle pas comme je le veux.
11 réponses
en ce qui concerne PHP (ou en fait, un serveur web en général), une page HTML n'est rien de plus compliqué qu'une grande chaîne de caractères.
tout le travail de fantaisie que vous pouvez faire avec le langage comme PHP - lecture à partir de bases de données et services web et tout cela - le but ultime est le même principe de base exacte: générer une chaîne de HTML*.
votre grande chaîne HTML ne devient rien de plus spécial que cela jusqu'à ce qu'elle soit chargée par un navigateur web. Une fois un le navigateur charge la page, puis toutes les autres choses magiques se produisent - la mise en page, les trucs de modèle de boîte, la génération de DOM, et bien d'autres choses, y compris L'exécution JavaScript.
donc, vous ne" appelez pas JavaScript à partir de PHP", vous"incluez un appel de fonction JavaScript dans votre sortie".
il y a plusieurs façons de le faire, mais en voici quelques-unes.
utilisant juste PHP:
echo '<script type="text/javascript">',
'jsfunction();',
'</script>'
;
S'échapper du mode php pour le mode de sortie directe:
<?php
// some php stuff
?>
<script type="text/javascript">
jsFunction();
</script>
vous n'avez pas besoin de retourner un nom de fonction ou quelque chose comme ça. Tout d'abord, arrêtez D'écrire des requêtes AJAX à la main. Vous ne faites que c'est dur sur vous-même. Obtenez jQuery ou l'un des autres cadres excellents là-bas.
Deuxièmement, comprenez que vous allez déjà exécuter le code javascript une fois que la réponse est reçue de L'appel AJAX.
voici un exemple de ce que je je pense que vous faites avec L'AJAX de jQuery
$.get(
'wait.php',
{},
function(returnedData) {
document.getElementById("txt").innerHTML = returnedData;
// Ok, here's where you can call another function
someOtherFunctionYouWantToCall();
// But unless you really need to, you don't have do
// We're already in the middle of a function execution
// right here, so you might as well put your code here
},
'text'
);
function someOtherFunctionYouWantToCall() {
// stuff
}
maintenant, si vous êtes prêt à envoyer un nom de fonction de PHP à L'appel AJAX, vous pouvez le faire aussi.
$.get(
'wait.php',
{},
function(returnedData) {
// Assumes returnedData has a javascript function name
window[returnedData]();
},
'text'
);
* ou JSON ou XML etc.
j'utilise toujours echo "<script> function(); </script>";
ou quelque chose de similaire. vous n'appelez pas techniquement la fonction en PHP, mais c'est aussi proche que vous allez l'obtenir.
Per now (février 2012) il y a une nouvelle fonctionnalité pour cela. Vérifier ici
exemple de Code (tiré du web):
<?php
$v8 = new V8Js();
/* basic.js */
$JS = <<< EOT
len = print('Hello' + ' ' + 'World!' + "\n");
len;
EOT;
try {
var_dump($v8->executeString($JS, 'basic.js'));
} catch (V8JsException $e) {
var_dump($e);
}
?>
vous ne pouvez pas. Vous pouvez appeler une fonction JS à partir de HTML outputted par PHP, mais c'est une toute autre chose.
c'est impossible. PHP est un langage côté serveur et JavaScript côté client et ils ne savent pas vraiment beaucoup l'un sur l'autre. Vous auriez besoin d'un interpréteur JavaScript côté serveur (comme Aptanas Jaxer). Peut-être que ce que vous voulez réellement faire est d'utiliser une Architecture de type Ajax (la fonction JavaScript appelle le script PHP de manière asynchrone et fait quelque chose avec le résultat).
<td onClick= loadxml()><i>Click for Details</i></td>
function loadxml()
{
result = loadScriptWithAjax("/script.php?event=button_clicked");
alert(result);
}
// script.php
<?php
if($_GET['event'] == 'button_clicked')
echo "\"You clicked a button\"";
?>
Si vous voulez en faire l'écho pour l'exécuter plus tard c'est ok
si vous voulez exécuter le JS et utiliser les résultats en PHP utilisez V8JS
V8Js::registerExtension('say_hi', 'print("hey from extension! "); var said_hi=true;', array(), true);
$v8 = new V8Js();
$v8->executeString('print("hello from regular code!")', 'test.php');
$v8->executeString('if (said_hi) { print(" extension already said hi"); }');
vous pouvez consulter ici pour d'autres références: que sont les Extensions dans php v8js?
si vous voulez exécuter HTML&JS et utiliser la sortie en PHP http://htmlunit.sourceforge.net / is your solution
PHP s'exécute dans le serveur. JavaScript fonctionne dans le client. Donc php ne peut pas appeler une fonction JavaScript.
vous pouvez essayer celui-ci aussi:-
public function PHPFunction()
{
echo '<script type="text/javascript">
test();
</script>';
}
<script type="text/javascript">
public function test()
{
alert('In test Function');
}
</script>
vous pouvez ne pas être en mesure de le faire directement, mais la bibliothèque Xajax est assez proche de ce que vous voulez. Je vais le démontrer par un exemple. Voici un bouton sur une page web:
<button onclick="xajax_addCity();">Add New City</button>
notre intuition serait que xajax_addCity()
est une fonction Javascript, Non? Bien, bon et mauvais. La chose cool Xajax permet est que nous n'avons pas de fonction JS appelée xajax_addCity()
, mais ce que nous avons est une fonction PHP appelée addCity()
qui peut faire tout ce que PHP fait!
<?php function addCity() { echo "Wow!"; } ?>
réfléchissez une minute. Nous invoquons virtuellement une fonction PHP à partir du code Javascript! Cet exemple trop simplifié était juste pour aiguiser l'appétit, une meilleure explication est sur le site Xajax, amusez-vous!
si vous voulez appeler method inside echo vous devez les enfermer dans des guillemets simples:
function f() {
//code
alert("its calling from echo ");
}
echo "<td onclick='f();'>".Method calling."</td>";
essayez comme ceci
<?php
if(your condition){
echo "<script> window.onload = function() {
yourJavascriptFunction(param1, param2);
}; </script>";
?>