使用jQuery将AJAX url请求到/ home目录

时间:2012-09-01 03:39:34

标签: jquery ajax absolute-path

我的网站分为public_html目录和包含所有PHP脚本的私有/ home目录。

我正在尝试利用jQuery的.ajax请求来访问我的public_html目录之外的PHP脚本,但是我很难这样做。我知道AJAX请求不允许域外请求,但是有没有办法“说服”AJAX我的请求的合法性,因为它实际上是在我的域内?

我目前的代码:

$.ajax({
    type: "GET",
    url: "/path/to/script",
    success: function(resp){
        alert(resp);
    },
    error: function(){
        alert('%$!@');
    }
});

如何能够在比我的www根目录更深入的目录中访问这些脚本?我希望保持对我的脚本的某些隐私和控制。

2 个答案:

答案 0 :(得分:1)

您收到了什么错误消息? (检查控制台)。浏览器会告诉您问题是否来自原点。  您可能需要在服务器上为该路径设置别名。我不认为Ajax会让你在没有使用“file:///”uri方案的情况下超越root。我不知道文件uri方案是否可以在Ajax中使用。别名将确保工作。这可以在httpd.conf文件中完成

答案 1 :(得分:1)

我可能误解了这个问题,所以我在这里有三个不同的答案。首先 与您使用的“域名”有关。如果您使用http访问公共内容,并使用https访问私有内容,您最好的选择可能是不尝试。浏览器对于让AJAX代码访问加载主网页的方法之外的东西变得非常挑剔。对于我自己的网站项目,我决定将所有内容移到https模式,只留下通过http访问的目录中的两个文件:“favicon.ico”的副本和新的“index.html”,其中包含:< / p>

 <!DOCTYPE html>
 <html>
 <head>
   <meta charset="UTF-8" />
   <meta name="Author" content="Me" />
   <meta name="Copyright" content= "(C) by Me" />
   <title>Switching to https mode ...</title>
 </head>
 <body onload="window.name='Redirect';window.open('https://www.mysite.com/index.html',
 'Redirect');">
 &nbsp;<h1><noscript><span style="color:#ff0000;">
 This site requires JavaScript to work properly.</span></noscript></h1>
 </body>
 </html>

下一个答案。检查你的php.ini文件是如何设置“open_basedir”的。它需要是一个比目录树的主干更接近目录的目录,而不是您希望Web服务器出于任何目的访问的所有目录。请注意Apache设置为使用PHP的方式,它有时可能在其/ bin目录中有一个php.ini文件的副本,并且您希望open_basedir设置在两个.ini文件中都相同。

最后回答:人们需要非常小心地使用AJAX调用的.php文件中的相对路径 - 但首先让我们回顾一下这些简单的东西。我们假设你的基目录是:

 /Base  //(ignoring drive letter and any "baser" directories here)

并且在该目录中你有一些.html文件,它们也会在那个目录中调用一些.php文件。您可以在XMLHttpRequest对象的JavaScript代码中使用类似的内容访问它们,在其中一个.html文件中:

 AJAXobj.open("GET", "./task1.php?URLdata=hi", true);

“./”指定“与此.html文件相同的目录”。同时,让我们假设您有一个子目录:

 /Base/SubDir

并且在该目录中你有一些.html文件,它们将像以前一样在/ Base目录中调用相同的.php文件。对于子目录中的.html文件,您将需要稍微不同的JavaScript:

 AJAXobj.open("GET", "../task1.php?URLdata=hi", true);

“../”指定“包含此.html文件的目录的父目录”。

现在是棘手的事情。假设,在task1.php文件中,您需要访问位于不同子目录中的一些数据:

 /Base/DataDir

事实证明.html文件的位置可能决定了你需要在.php文件中指定的路径!更具体地说:

A)如果task1.php文件(在/ Base目录中)直接访问该另一个(/ DataDir)子目录中的文件,则需要这样的内容:

 file("./DataDir/DatFile.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

- 无论.html文件位于何处,都会出现这种情况,调用task1.php

B)如果.php文件为文件创建一个字符串,并返回该字符串以进行AJAX处理(因为.html文件中的更多JavaScript代码将访问数据文件),那么PHP创建的字符串将取决于.html文件的位置:

 "./DataDir/DatFile.txt"

对于/ Base目录中的任何.html文件,或

 "../DataDir/DatFile.txt"

对于/ Base / SubDir中的任何.html文件

这里一个简单的解决方案可能是有两个非常相似的.php文件,比如task1a.php和task1b.php。但是,另一种可能性涉及指定绝对路径而不是相对路径:

 "https://www.mysite.com/DataDir/DatFile.txt"