2012-08-03 39 views
2

参考我的另一个问题:Context-aware AJAX call in a modular site,是否有可能以便捷的方式设置AJAX代理?使用PHP的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及其他黑客可能的检查) 。

回答

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将不起作用请求

+0

因此,头部重定向对AJAX调用也起作用*这似乎很有趣,适应包括POST标题不应该*那*难... – Cranio 2012-08-03 10:11:46

+0

恐怕很难。 AJAX请求本质上是标准的HTTP请求,所以在这里没有什么魔力。我们在这个PHP代码中做的是我们发送重定向头,这个头可以返回到浏览器,然后依次询问给定URL的内容。但它不会第二次发送POST数据(这是正常的POST-REDIRECT-GET模式)。为了能够发送POST数据,您必须发送POST数据并在PHP脚本中读取响应(可能使用cURL)并输出响应。代码示例中的Google'php curl post'。 – jderda 2012-08-03 14:08:42

+0

是的,根据你的回答,我已经做了一些研究和cURL似乎要走的路。或者,也许,做一个GET请求,其中POST变量被特别标记并转换为GET变量(但如果我没有错,GET有长度限制,所以不会有完整的兼容性)。感谢您的解释:) – Cranio 2012-08-03 14:56:58

0

相反,你也可以声明在第一个页面请求您的JavaScript变量,然后用它 让的说SITE_URL包含你的PHP计算网址

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

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

+0

正如我的其他问题(我已经链接到的那个)中所述,我已经在使用这种方法,但我希望在URL中有更多的灵活性。无论如何,我总是问一个真正的AJAX代理脚本。 – Cranio 2012-08-03 10:09:57

相关问题