2

参考我的另一个问题:模块化站点中的上下文感知 AJAX 调用,是否可以以方便的方式设置 AJAX 代理?

我希望使用动态 url 发出 AJAX 请求,而不用服务器端 PHP 指令污染 JavaScript 代码,在模块化 Apache/PHP/MySQL 站点中计算 ajax php 文件的正确路径,这是我编写的粗略 CMS。换句话说,该站点有插件和组件,它们具有自己的文件夹结构,其中包含它们的 CSS、JS 和 PHP,并且我具有动态检索它们的文件夹的功能。我希望:

$("#mydiv").load(siteRoot + "/ajax.php?plugin=datagrid&
action=myaction&... other params...");

将改为调用(使用 PHP 在服务器端计算的 URL):

{siteRoot}/components/datagrid/ajax/myaction.php?... other params ...

(显然,对注入、CSRF 和其他黑客进行了所有可能的检查)。

4

2 回答 2

1

/ajax/get.php 文件应如下所示:

$plugin = $_GET['plugin'];
$action = $_GET['action'];
$get = array();
foreach ($_GET as $k=>$v) {
    if($k!='plugin' && $k!='action') {
        $get[] = "{$k}={$v}";
    }
}
$url = 'siteRoot/components/'.$plugin.'/ajax/'.$action.'.php?'.implode('&', $get);

header("Location: {$url}");

当然,您需要在上面的代码中添加一些安全检查

编辑:缺点是它不适用于发送 POST 请求

于 2012-08-03T09:21:01.097 回答
0

相反,您也可以在您的第一页请求中声明您的 javascript 变量,然后使用它,假设 SITE_URL 包含您的 php 计算 url

 var siteRoot = '<?php echo SITE_ROOT?>' // or some thing else 

因此,对于此行之后包含的任何 .js 脚本,都将定义 siteRoot var。

于 2012-08-03T09:30:19.950 回答