2013-07-07 45 views
0

我想從一個頁面內重寫一個URL來進行ajax調用。來自重寫URL的Ajax調用

request = $.ajax({ 
       url: "myajaxcode.php", 
       type: "post", 
       data: formData 
      }); 

產生的請求.../Folder/Rewritten_Name/myajaxcode.php

對於這項工作的網址應該是.../Folder/myajaxcode.php

我用一個反斜槓在URL中也嘗試: 「/myajaxcode.php」,這解析爲 /myajaxcode.php

當我提供絕對URL或如果我使用函數計算並基於URL並將其作爲php文件名的前綴時,ajax就可以工作。不過,理想情況下,我想避免使用絕對網址或其他功能。

有沒有更好的方法來處理ajax調用?

我的htaccess是

RewriteEngine on 
RewriteBase /Folder/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^Rewritten_Name/([^/]+) Rewritten_Name.php?r=$1 
+0

這取決於在哪個HTML範圍內運行ajax調用。包含頁面的基本URL是相關的。是的,如果您無法可靠地斷言,請使用絕對路徑。 – mario

+0

謝謝馬里奧。是的,問題在於HTML範圍。實際上,首先ajax調用返回整個HTML頁面......直到我意識到問題出在了rewrite/ajax請求上。 – perNalin

回答

1

如果從example.com/Folder/foo.php發出請求到example.com/Folder/myajaxcode.php 你可以使用相對URL,這樣的:

request = $.ajax({ 
       url: "./myajaxcode.php", 
       type: "post", 
       data: formData 
      }); 

假設定義的重寫規則是正確的,工作正是你想讓他們成爲&基地url meta標籤在html中設置正確。

進一步另一個接近,我一直在採取的是:在PHP中設置一個全局js變量在某些函數中&調用函數<head>哪裏有他們想要的ajax。這樣

<?php 
function set_ajax_url($script_path){ 
    $ajax = "<script type='text/javascript'>"; 
    $ajax .= "window.MY_AJAX_URL = "; 
    $ajax .= $_SERVER['HTTP_HOST'] . $script_path; 
    $ajax .= "</script>"; 
    echo $ajax; 
} 

添加這個在你的模板/佈局

<html> 
<head> 
<?php set_ajax_url('Folder/myajaxcode.php'); ?> 
</head> 

你使用可以這樣像這樣:

request = $.ajax({ 
       url: MY_AJAX_URL, 
       type: "post", 
       data: formData 
      }); 

所以,你將不得不在一個地方更改網址: )

+0

他說他不想使用絕對URL,但我同意通過PHP設置絕對路徑,因爲這就是我自己做的。 – MahanGM

+0

感謝Gaurish,Mahan。是的,我嘗試了絕對路徑和常用函數/ base_url,但想知道是否有更好的方法。 – perNalin