【问题标题】:Ajax call from rewritten url来自重写 url 的 Ajax 调用
【发布时间】:2013-07-07 12:15:43
【问题描述】:

我正在尝试从具有重写 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

【问题讨论】:

  • 这取决于 ajax 调用在哪个 HTML 范围内运行。包含页面的基本 url 是相关的。是的,如果您不能可靠地断言它,请使用绝对路径。
  • 谢谢马里奥。是的,问题是 HTML 范围。事实上,起初 ajax 调用返回整个 HTML 页面......直到我意识到问题出在 rewrite / ajax 请求上。

标签: php ajax .htaccess


【解决方案1】:

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

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

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

另外一个方法,我一直在采取的是:在某个函数中从 PHP 设置一个全局 js 变量,然后在他们想要 ajax 的任何地方调用 <head> 中的函数。像这样

<?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 :)

【讨论】:

  • 他说他不想使用绝对 URL,但我同意通过 PHP 设置绝对路径,因为这是我自己做的。
  • 谢谢Gaurish,马汉。是的,我尝试了绝对路径和常用函数 /base_url 但想知道是否有更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多