2012-08-03 122 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

相關問題