Как использовать Ajax для внедрения определенной функции PHP с использованием URL или другого метода? - PullRequest
1 голос
/ 22 января 2010

Я перехожу из области просто JS в php и Ajax. Я немного баловался с PHP в прошлом. Я действительно ценю помощь, которую оказывал stackoverflow, помогая мне с основными вопросами.

пусть говорит, что у меня есть div с именем #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.

Буду признателен за любую помощь!

Ответы [ 3 ]

2 голосов
/ 22 января 2010

Принятие предложения @ VolkerK и добавление функции отказа:

$func = $_GET['func'];
$allowed = array('header', 'footer');
if (in_array($func, $allowed) && function_exists($func)) $func();
else default_action();
2 голосов
/ 22 января 2010
<?php

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

$functionName = $_GET[ 'func' ];

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

/* your function definitions */
?>

$allowedFunctions является массивом белых списков определенных пользователем функций (например, ваших), которые вы хотите разрешить при вызове ajax. Если вы не сохраните этот белый список, ваш сценарий будет потенциально опасным, поскольку он позволит любому исполнить произвольную функцию. Это то, что вы определенно не хотите.

2 голосов
/ 22 января 2010

Попробуйте с:

$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();
...