2010-01-22 10 views
1

Je passe du domaine de JS à PHP et Ajax. J'en ai parlé avec PHP dans le passé. I vraiment apprécier combien aide stackoverflow a été en m'aidant avec des questions de base.Comment utiliser Ajax pour injecter une fonction PHP spécifique en utilisant une URL, ou une autre méthode?

disons que j'ai un div appelé #divName. J'utilise le JS suivant pour Ajax. Une partie de ceci est juste du pseudo code.

var request = false; 
    try { 
    request = new XMLHttpRequest(); 
    } catch (trymicrosoft) { 
    try { 
     request = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (othermicrosoft) { 
     try { 
     request = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (failed) { 
     request = false; 
     } 
    } 
    } 

    if (!request) 
    alert("Error initializing XMLHttpRequest!"); 

    function getAjaxInfo(<name of the php function???>) { //<<<<< this is the function I need help with 
    var myFunction= nameOfPHPfunctionIJustGot; 
    var url = "filename.php?func=" + myFunction; 
    request.open("GET", url, true); 
    request.onreadystatechange = updatePage; 
    request.send(null); 
    } 

    function updatePage() { 
    if (request.readyState == 4) { 
     if (request.status == 200) { 
     var response = request.responseText; 
      document.getElementById("divName").innerHTML = response; //probably going to use Jquery append here, but this example works. 
       } else 
     alert("status is " + request.status); 
    } 
    } 

Le j'ai mon fichier filename.php:

<?php 

function header() { ?> 
    header content goes here 
<?php } 

function footer() { ?> 
    footer content goes here 
<?php } 

?> 

Mon but est que quand j'exécute getAjaxInfo(), je peux tirer quelque fonction PHP que je veux.

Disons donc que si je fais un onClick="getAjaxInfo(header) "il obtiendra la fonction d'en-tête de php, appliquer à une fonction javascript, et ensuite appliquer cela à un div.

Toute aide serait appréciée!

Répondre

2

Essayez avec:

$func=$_GET['func']; 
if(function_exists($func)) $func(); 

de cette façon, vous obtenez le nom de la fonction passée par GET et execute il

Si vous voulez être en mesure d'appeler o. eul certaines fonctions:

$allowedFunctions=array("header","footer"); 
$func=$_GET['func']; 
if(in_array($func,$allowedFunctions) && function_exists($func)) $func(); 
+2

Mais vous voulez probablement utiliser une sorte de whiteliste au lieu de permettre des appels à des fonctions arbitraires (même si vous le limitez aux fonctions sans paramètre) – VolkerK

+0

Grr ... J'étais juste en train d'écrire ce code exact. Ya me battre à ça. :) Aussi, tant que vous avez jquery autour, je vous recommande fortement d'utiliser ses fonctions ajax, plutôt que de rouler les vôtres. – sprugman

+0

ha! Je n'ai même pas pensé à vérifier si jquery avait des fonctions ajax ... drr – Jared

2

Reprenant la suggestion de @ VolkerK, et l'ajout d'une fonction d'échec:

$func = $_GET['func']; 
$allowed = array('header', 'footer'); 
if (in_array($func, $allowed) && function_exists($func)) $func(); 
else default_action(); 
+0

merci pour la fonctionnalité supplémentaire :) – Jared

2
<?php 

$allowedFunctions = array(
    'header', 
    'footer' 
); 

$functionName = $_GET[ 'func' ]; 

if(in_array($functionName, $allowedFunctions) && function_exists($functionName)) 
{ 
    $functionName(); 
} 

/* your function definitions */ 
?> 

$allowedFunctions est un tableau d'utilisateur défini whitelist (de i.o.w. your) fonctions php que vous voulez que l'appel ajax autorise à exécuter. Si vous ne gardez pas cette liste blanche, votre script sera potentiellement dangereux, car il permettrait à quiconque d'exécuter une fonction arbitraire. C'est quelque chose que vous ne voulez certainement pas.