2013-07-07 29 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