0

我正在尝试从具有重写 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 就可以工作。但是,理想情况下,我想避免使用绝对 url 或附加功能。

有没有更好的方法来处理 ajax 调用?

我的 htaccess 是

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

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

1 回答 1

1

如果您向example.com/Folder/foo.phpto发出请求,example.com/Folder/myajaxcode.php 则可以使用相对 URl,如下所示:

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

假设定义的重写规则是正确的,完全按照您希望的方式工作,并且在 html 中正确设置了基本 url 元标记。

另一个方法,我一直在采取的是:在某个函数中从 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
            });

因此,您将不得不在一处更改 url :)

于 2013-07-07T12:38:46.487 回答