2012-12-30 154 views
0

我在調用php腳本的網站上使用ajax,然後解析另一個頁面並返回我想要顯示的頁面部分。過去我使用過這種技術,並且效果很好,除了這次返回的頁面部分有一些php代碼,並且它正在被處理的php代碼正在返回。在ajax調用中處理php代碼

這是執行解析並返回結果的php腳本。

require_once('simple_html_dom.php'); 
$dom = new simple_html_dom; 

if(isset($_GET['url'])) { 
    $url = $_GET['url']; 
    $html = file_get_html($url); 
    /*get contents*/ 
    $contents = $html->getElementById('content'); 
    echo $contents; 
} 

正如我所提到正在返回什麼正在返回$內容原料與出$內容字符串中的PHP代碼被處理,我怎麼能得到它返回$內容字符串之前處理PHP代碼?

非常感謝您的幫助。

+2

如果您直接查看PHP文件(不通過Ajax請求),它工作呢?因爲ajax無法阻止PHP被處理,所以關注PHP腳本並忽略ajax。 'php'文件要麼沒有使用正確的擴展名,要麼因爲某種原因沒有被解析。 –

+0

雖然apache \ php沒有解析本地文件。這看起來像是一種奇怪的方式從你自己的文件中獲取動態內容 – 2012-12-30 05:29:53

+0

嘗試使用jQuery'.load()'函數加載php文件。這應該處理文件並正確加載 –

回答

1

解析由另一個PHP腳本生成的HTML是相當黑客。如果您正在開發一個新站點,至少應該將您的PHP腳本劃分爲多個函數,然後對於AJAX請求,只調用必要的函數。

即使您正在使用現有的,複雜的網站,請記住,jQuery的.load()允許你插入服務器的響應到文檔中的特定片段,丟棄其餘:

$('#content').load('script.php #content'); 

這就是說,你問的是可能的:

  • PHP的output control功能,讓您捕捉到一個腳本的輸出是一個字符串,可以使用str_get_html()來解析。要做到這一點,你必須包含現有的PHP腳本。請注意,您包含的任何腳本都可以訪問全局函數和變量,superglobals和類。

    警告:請確保您對照特定文件的白名單檢查了請求的文件名以阻止file inclusion attacks。僅將黑名單URL和禁用allow_url_fopen不足以保護您的網站。

    ob_start(); 
    require $filename; // might have to be outside of a function 
    $html = str_get_html(ob_get_clean()); 
    
  • 或者,你可以有AJAX腳本使使用或者file_get_contents()cURL(指定一個絕對URL,而不是文件名)自己的HTTP請求。除非您另外配置您的Web服務器,否則此內部請求將顯示在您的Web服務器的訪問日誌中,來自127.0.0.1或您的Web服務器的IP地址。

+0

你是對的。.load函數是一個更簡單的方法來做我想做的事情。我不知道你可以用它來加載頁面的一部分。謝謝 –