使用jQuery对/home目录的AJAX url请求

使用jQuery对/home目录的AJAX url请求,jquery,ajax,absolute-path,Jquery,Ajax,Absolute Path,我的网站分为一个公共html目录和一个包含我所有PHP脚本的私有侧/主目录 我试图利用jQuery的.ajax请求访问我的public_html目录之外的PHP脚本,但在这样做时遇到了问题。我知道AJAX请求不允许域外请求,但是有没有办法“说服”AJAX我的请求的合法性,因为它实际上在我的域内 我当前的代码: $.ajax({ type: "GET", url: "/path/to/script", success: function(resp){ ale

我的网站分为一个公共html目录和一个包含我所有PHP脚本的私有侧/主目录

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

我当前的代码:

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

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

您收到了什么错误消息? (检查控制台)。浏览器将告诉您问题是否是跨原点的。
您可能需要在服务器上为该路径设置别名。我认为,如果不使用“file://”uri方案,Ajax永远不会允许您进入根目录下。我不知道文件uri方案是否可以在Ajax中使用。别名肯定会起作用。这是在您的httpd.conf文件中完成的,我可能误解了这个问题,所以这里有三个不同的答案。第一 与您使用的“域”一词相关。如果您使用http访问公共内容,使用https访问私有内容,那么最好的选择可能是不要尝试。浏览器对于让AJAX代码访问主网页加载方法之外的内容越来越挑剔。对于我自己的网站项目,我决定将所有内容切换到https模式,并在通过http访问的目录中只留下两个文件:一个是“favicon.ico”的副本,另一个是新的“index.html”,其中包含以下内容:

 <!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>
在该目录中有一些.html文件,它们将调用一些.php文件,也在该目录中。您可以在XMLHttpRequest对象的JavaScript代码中,在其中一个.html文件中使用如下内容来访问它们:

 AJAXobj.open("GET", "./task1.php?URLdata=hi", true);
“/”指定“与此.html文件相同的目录”。同时,假设您有一个子目录:

 /Base/SubDir
 AJAXobj.open("GET", "../task1.php?URLdata=hi", true);
 /Base/DataDir
在该目录中有一些.html文件,它们将调用/Base目录中相同的.php文件,如前所述。对于子目录中的.html文件,您将需要稍微不同的JavaScript:

 /Base/SubDir
 AJAXobj.open("GET", "../task1.php?URLdata=hi", true);
 /Base/DataDir
“./”指定“包含此.html文件的目录的父目录”

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

 /Base/SubDir
 AJAXobj.open("GET", "../task1.php?URLdata=hi", true);
 /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"

您可以使用AJAX在公用文件夹外调用脚本。路径是相对的,所以您可以使用
向上移动一个目录我知道相对路径方法是AJAX的运行方式,但它似乎不适合我的特殊需要。我的目录结构如下:public_html/css/js/index.php resources/library/scripts/config.php问题是我试图从public_html目录访问脚本/目录。当我尝试相对路径方法时,“../../”的jQuery url只返回index.php url,即使我使用更多子目录请求修改url。。。如何在公共html之外访问这些目录?我假设您使用的是Apache。如果这是不正确的,你应该谷歌使用别名的服务器上使用。如果您正在使用Apache,这里有一些很好的信息:。基本上,您所做的就是在public_html范围内获取一个路径并为其分配一个地址。如果您不熟悉apache的conf文件,它可能看起来令人望而生畏,但一旦您了解了语法,它就很简单了。