1

我正在从 JS 领域转移到 php 和 Ajax。我过去曾涉足过一些 PHP。我非常感谢 stackoverflow 在帮助我解决基本问题方面提供了多少帮助。

假设我有一个名为#divName.

我将以下 JS 用于 Ajax。其中一些只是伪代码。

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);
     }
   }

我有我的 fileName.php 文件:

<?php

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

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

?>

我的目标是,当我执行时getAjaxInfo(),我可以提取任何我想要的 PHP 函数。

所以让我们说如果我做一个onClick="getAjaxInfo(header)“它将获得php头函数,将它应用到一个javascript函数,然后将它应用到一个div。

任何帮助,将不胜感激!

4

3 回答 3

2

接受@VolkerK 的建议,并添加一个失败函数:

$func = $_GET['func'];
$allowed = array('header', 'footer');
if (in_array($func, $allowed) && function_exists($func)) $func();
else default_action();
于 2010-01-22T15:56:35.947 回答
2
<?php

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

$functionName = $_GET[ 'func' ];

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

/* your function definitions */
?>

$allowedFunctions是用户定义的(iow 你的)php 函数的白名单数组,你希望 ajax 调用允许执行。如果您不保留此白名单,您的脚本将具有潜在危险,因为它允许任何人执行任意函数。那是你绝对不想要的。

于 2010-01-22T15:57:23.543 回答
2

尝试:

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

通过这种方式,您可以获取 GET 传递的函数名称并执行它。

如果您希望只能调用某些函数:

$allowedFunctions=array("header","footer");
$func=$_GET['func'];
if(in_array($func,$allowedFunctions) && function_exists($func)) $func();
于 2010-01-22T15:51:04.883 回答