В связи с моим другим вопросом: Context-aware AJAX-вызов на модульном сайте , можно ли настроить прокси AJAX удобным способом?
Я хотел бы сделать запросы AJAX с динамическим url, не испортив код JavaScript с помощью инструкций PHP на стороне сервера, вычисляя правильный путь для файла php ajax на модульном сайте Apache / PHP / MySQL, грубой CMS, написанной мной. Другими словами, на сайте есть плагины и компоненты со своими собственными структурами папок, содержащими их CSS, JS и PHP, и у меня есть функции для динамического восстановления их папки. Я бы хотел:
$("#mydiv").load(siteRoot + "/ajax.php?plugin=datagrid& action=myaction&... other params...");
вместо этого вызывается (с URL-адресом, вычисленным на стороне сервера PHP):
{siteRoot}/components/datagrid/ajax/myaction.php?... other params ...
(очевидно, со всеми возможными проверками против инъекций, CSRF и других хаков).
Файл /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}");
Конечно, вам нужно добавить некоторые проверки безопасности на код выше
EDIT: Недостатком является то, что он не будет работать для отправки запросов POST
Вместо этого вы также можете объявить свою javascript-переменную в своем первом запросе на страницу, а затем использовать ее, чтобы сказать, что SITE_URL содержит ваш php-вычисленный URL-адрес
var siteRoot = '<?php echo SITE_ROOT?>' // or some thing else
поэтому для любого сценария .js, включенного после этой строки, будет определена siteRoot var.