83 votes

Appeler une fonction php à partir de JavaScript

Existe-t-il un moyen d'exécuter une fonction php à travers une fonction JS ?

quelque chose comme ça :

<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php 
query("hello");       ?>";    
}
</script>

<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"     
onclick="test(); return false;"> test </a>
<span id="php_code"> </span>

Je veux essentiellement exécuter la fonction php query("hello") lorsque je clique sur le lien appelé "Test", qui appelle la fonction php.

4 votes

Tout simplement non, il n'y a aucun moyen de le faire, sauf à appeler la méthode requise en utilisant ajax.

9 votes

Vous savez : PHP fonctionne sur le serveur, mais JS sur le client ? Ce site no puede fonctionnent de cette façon.

1 votes

Attends, attends, n'est-ce pas <?php query("hello"); ?> rendu par php quand la page est chargée ? si oui, il peut obtenir la sortie de query("hello") dans la fonction js.

149voto

Chris Points 20836

C'est, en substance, ce que AJAX es pour . Votre page se charge, et vous ajoutez un événement à un élément. Lorsque l'utilisateur déclenche l'événement, par exemple en cliquant sur un élément, votre Javascript utilise la fonction Objet XMLHttpRequest pour envoyer une requête à un serveur.

Une fois que le serveur a répondu (vraisemblablement avec un résultat), une autre fonction/événement Javascript vous permet de travailler avec ce résultat, y compris de le coller dans la page comme n'importe quel autre élément HTML.

Vous pouvez le faire "à la main" avec du simple Javascript , ou vous pouvez utiliser jQuery. En fonction de la taille de votre projet et de votre situation particulière, il peut être plus simple d'utiliser simplement Javascript .

Plain Javascript

Dans cet exemple très basique, nous envoyons une requête à myAjax.php lorsque l'utilisateur clique sur un lien. Le serveur va générer du contenu, dans ce cas "hello world !". Nous allons mettre dans l'élément HTML avec l'id output .

Le javascript

// handles the click event for link 1, sends the query
function getOutput() {
  getRequest(
      'myAjax.php', // URL for the PHP file
       drawOutput,  // handle successful request
       drawError    // handle error
  );
  return false;
}  
// handles drawing an error message
function drawError() {
    var container = document.getElementById('output');
    container.innerHTML = 'Bummer: there was an error!';
}
// handles the response, adds the html
function drawOutput(responseText) {
    var container = document.getElementById('output');
    container.innerHTML = responseText;
}
// helper function for cross-browser request object
function getRequest(url, success, error) {
    var req = false;
    try{
        // most browsers
        req = new XMLHttpRequest();
    } catch (e){
        // IE
        try{
            req = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            // try an older version
            try{
                req = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return false;
            }
        }
    }
    if (!req) return false;
    if (typeof success != 'function') success = function () {};
    if (typeof error!= 'function') error = function () {};
    req.onreadystatechange = function(){
        if(req.readyState == 4) {
            return req.status === 200 ? 
                success(req.responseText) : error(req.status);
        }
    }
    req.open("GET", url, true);
    req.send(null);
    return req;
}

Le HTML

<a href="#" onclick="return getOutput();"> test </a>
<div id="output">waiting for action</div>

Le PHP

// file myAjax.php
<?php
  echo 'hello world!';
?>

Essayez-le : http://jsfiddle.net/GRMule/m8CTk/


Avec une bibliothèque javascript (jQuery et al)

On peut dire que cela représente beaucoup de code Javascript. Vous pouvez le raccourcir en resserrant les blocs ou en utilisant des opérateurs logiques plus laconiques, bien sûr, mais il y a encore beaucoup de choses à faire. Si vous prévoyez de faire beaucoup de ce type de choses dans votre projet, vous feriez mieux d'utiliser une bibliothèque javascript.

En utilisant le même HTML et PHP que ci-dessus, voici votre script complet (avec jQuery inclus dans la page). J'ai un peu resserré le code pour être plus cohérent avec le style général de jQuery, mais vous comprenez l'idée :

// handles the click event, sends the query
function getOutput() {
   $.ajax({
      url:'myAjax.php',
      complete: function (response) {
          $('#output').html(response.responseText);
      },
      error: function () {
          $('#output').html('Bummer: there was an error!');
      }
  });
  return false;
}

Essayez-le : http://jsfiddle.net/GRMule/WQXXT/

Ne vous précipitez pas tout de suite sur jQuery : ajouter une bibliothèque, quelle qu'elle soit, revient à ajouter des centaines ou des milliers de lignes de code à votre projet, aussi sûrement que si vous les aviez écrites. À l'intérieur du fichier de la bibliothèque jQuery, vous trouverez un code similaire à celui du premier exemple, ainsi qu'un fichier beaucoup plus . C'est peut-être une bonne chose, peut-être pas. Planifiez, et tenez compte de la taille actuelle de votre projet et des possibilités d'expansion futures, ainsi que de l'environnement ou de la plate-forme cible.

Si c'est tout ce que vous avez besoin de faire, écrivez le javascript simple une fois et vous avez terminé.

Documentation

4 votes

-1, demi réponse, le PO a demandé comment appeler une fonction php depuis javascript. Pou a seulement montré comment appeler une PAGE php. Vous devez ajouter des variables post dans l'appel ajax et php vérifie ces variables post puis appelle cette fonction php si ces variables post existent.

6 votes

Avec une infinité d'arrangements possibles du code côté serveur, il n'est pas constructif ou même possible pour moi de deviner quelle architecture l'OP utilise. Ce n'est pas non plus en rapport avec l'énoncé du problème immédiat, puisque le PO ne fait pas référence à POST (ou GET) ou à la nécessité de passer des valeurs. Je pense que votre downvote est déplacé, et je ne vais pas ajouter à ma réponse des spéculations arbitraires sur un sujet qui n'est pas contenu dans l'OP. Merci quand même pour le feedback.

0 votes

Lorsque j'utilise votre code, j'obtiens une erreur en raison de l'utilisation de "var" devant la déclaration de la fonction. En supprimant "var", cela fonctionne.

17voto

Dor Points 3731

PHP est évalué au niveau du serveur ; javascript est évalué au niveau du client/navigateur. Vous ne pouvez donc pas appeler une fonction PHP à partir de javascript. directement . Mais vous pouvez envoyer une requête HTTP au serveur qui activera une fonction PHP, avec AJAX.

3 votes

@Hanoncs : Ce es la réponse. Le PO a demandé si vous pouvez exécuter une fonction PHP via JS. La réponse est - vous ne pouvez pas . S'il avait demandé si vous pouvez émettre une requête HTTP qui fera en sorte que le serveur web active un script PHP qui exécutera une fonction PHP - alors oui -. que est possible. Mais il ne l'a pas demandé, donc je n'écris pas de données non pertinentes.

11 votes

Haha allez mec, tu sais que c'est ce que le PO voulait dire par sa question. S'il savait comment l'expliquer exactement comme ça, il saurait déjà comment le faire.

11voto

morsik Points 127

Le seul moyen d'exécuter du PHP à partir de JS est AJAX. Vous pouvez envoyer des données au serveur (par exemple, GET /ajax.php?do=someFunction) puis dans ajax.php vous écrivez :

function someFunction() {
    echo 'Answer';
}

if ($_GET['do'] === "someFunction") {
    someFunction();
}

et ensuite, attraper la réponse avec JS (j'utilise jQuery pour faire des demandes AJAX)

Vous aurez probablement besoin d'un certain format de réponse. Voir JSON ou XML, mais JSON est facile à utiliser avec JavaScript. En PHP, vous pouvez utiliser la fonction json_encode($array) ; qui prend le tableau comme argument.

5voto

Xaxis Points 656

J'ai récemment publié un plugin jQuery qui vous permet d'effectuer des appels de fonctions PHP de différentes manières : https://github.com/Xaxis/jquery.php

Exemple simple d'utilisation :

// Both .end() and .data() return data to variables
var strLenA = P.strlen('some string').end();
var strLenB = P.strlen('another string').end();
var totalStrLen = strLenA + strLenB;
console.log( totalStrLen ); // 25

// .data Returns data in an array
var data1 = P.crypt("Some Crypt String").data();
console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]

5 votes

En dehors du parti pris évident que les gens ont à l'égard de l'appel de fonctions PHP via JavaScript, expliquez-moi exactement pourquoi ma réponse a été rejetée autant qu'elle l'a été ? Je réponds légitimement à la question posée en proposant une solution, n'est-ce pas ?

-2voto

leopic Points 1434

Je pense que vous devriez utiliser un formulaire ou une sorte d'action d'envoi pour faire cela. Gardez à l'esprit que cela transférera l'utilisateur vers une autre page, sauf si vous essayez de le faire via AJAX.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X