Javascript 如何使ajax在不同的目录中工作?
首先,让我向您展示文件夹结构:Javascript 如何使ajax在不同的目录中工作?,javascript,ajax,jquery,Javascript,Ajax,Jquery,首先,让我向您展示文件夹结构: public_html[] |_ project_folder[] |_another_folder[] |_xml_folder[] |_xmlfile.xml |_ js_folder[] |_javascriptfile.js |_ file.
public_html[]
|_ project_folder[]
|_another_folder[]
|_xml_folder[]
|_xmlfile.xml
|_ js_folder[]
|_javascriptfile.js
|_ file.html
|_ file2.html
我有一些file.html和file2.html加载,在文档加载上使用jqueryajax。Ajax使用以下代码:
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "xml/xmlfile.xml",
dataType: "xml",
...
...
...
}
当在文件的根目录中找到HTML文件时(就像现在一样),这些方法可以很好地工作
现在,当我将一个html文件移动到一个文件夹(例如,将file2.html移动到另一个文件夹)时,加载xml文件不再有效。不要以为我已经在html ie上更改了必要的src标记:从src\“js/javascriptfile.js”到src=\“./js/javascriptfile.js”
我没有更改的是javascript文件上的“url”。现在,XML没有加载,因为它试图在自己的目录(另一个文件夹/XML/xmlfile.XML)中查找XML文件,而不是从它所在的根目录中查找
我的问题是,应该怎么做才能避免这个问题?在js文件中使用绝对URL,例如
'/project/xml/xmlfile.xml'
如果您希望它更通用,那么您还可以做其他事情,比如读取当前url并从中构建ajax url
更新:回复评论
一个如何生成正确路径的示例。
如果项目始终是第一个子目录,那么这将有助于构建正确的url
function xml_url(){
var first_dir_regexp = /https?:\/\/[^\/]+\/([^\/]+)\/.+/;
matches = first_dir_regexp.exec(document.location.toString());
return matches[1]+"/xml/xmlfile.xml";
}
//...
xml_url()
这段代码使用regexp拉出url的第一个目录,并将/xml/xmlfile.xml追加到该目录
例如如果页面为example.com/project1/awesome/index.html,则返回example.com/project1/xml/xmlfile.xml
注意此代码非常脆弱,您可能需要添加一些检查。这只是一个例子
如果您的项目超过一个级别,您应该考虑添加一些配置设置,让JavaScript更了解它正在运行的环境。
使用相对于Web根而不是当前目录的URL。
$(document).ready(function()
{
$.ajax({
type: "GET",
url: "/xml/xmlfile.xml", // note the leading slash
dataType: "xml",
...
...
...
}
因为我讨厌代码重复,所以我也有同样的问题 我是这样想的:
<script type="text/javascript" src="../shared_code/shared_js.php?path=."></script>
我的目录结构:
include_db/
dbconnect.php
main_project/
shared_code/
ajax/
ajax_script.php
shared_js.php
sub_project/
sub_index.php
index.php
请注意,我在.php文件中确实有javascript!我会解释为什么更低
从index.php中,我包含了声明以下内容的共享java:
<script type="text/javascript" src="./shared_code/shared_js.php"></script>
从sub_index.php我这样做:
<script type="text/javascript" src="../shared_code/shared_js.php?path=."></script>
共享的_js.php文件使用的是AJAX,下面是为什么它在.php中而不是.js中:
$.ajax({
url: ".<?php echo $_GET[path]; ?>/shared_code/ajax/ajax_script.php",
...
$.ajax({
url:“./shared_code/ajax/ajax_script.php”,
...
因为我必须根据调用它的位置来更改ajax脚本的路径。这就是我在index.php或sub\u index.php中设置的$\u GET[path]变量的内容
AJAX脚本AJAX\u script.php将再次使用相对于自身的路径,因此它将具有您通常会执行的操作:
<?php
require("../../../include_db/dbconnect.php");
我尝试了你的答案,问题是我希望HTML文件“不在乎”它们放在哪里,这样它们就可以放在目录中,不管它们来自文档根目录的位置有多低(有时,它会低3-4个文件夹)。至于获取当前url,我也尝试过,但是如何获取文件的主目录,以便将当前url与之进行比较?例如:当前文件位于“public_html/project_folder/other_folder/other_sub_folder/file2.html”中。如何从所有这些中获取“project_folder”如果该文件位于1dir更低的位置会怎么样?与我对上面那个家伙的评论相同:“我希望HTML文件“不在乎”它们放在哪里,这样它们就可以被放在目录中,不管它们从文档根目录的位置有多低(有时,它会低3-4个文件夹)。至于获取当前url,我也尝试过,但是如何获取文件的主目录,以便将当前url与之进行比较?例如:当前文件位于“public_html/project_folder/other_folder/other_sub_folder/file2.html”中。如何从所有这些中获取“project_folder”?“如果文件位于1dir更低的位置会怎么样?”如果从web根目录引用XML文件,则HTML文件位于何处并不重要。只要不在层次结构中移动其文件夹,XML文件将始终被引用到何处。感谢//注意前导斜杠