为什么jQuery.get(';/home/user/0/0a.html';)在使用file:而不是http:时失败?

为什么jQuery.get(';/home/user/0/0a.html';)在使用file:而不是http:时失败?,jquery,Jquery,在前两段中,单击会生成包含指定文件内容的警报框。在后两种情况下,没有警报框 <html><head> <script type="text/javascript" src="../../../../resources/jquery_1-4-2.js"></script> </head><body> <p onclick="$.get('/home/user/0/1/2/3/4/4a.html','',function(

在前两段中,单击会生成包含指定文件内容的警报框。在后两种情况下,没有警报框

<html><head>
<script type="text/javascript" src="../../../../resources/jquery_1-4-2.js"></script>
</head><body>
<p onclick="$.get('/home/user/0/1/2/3/4/4a.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/4/4a.html</p>
<p onclick="$.get('/home/user/0/1/2/3/4/resources/4ra.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/4/resources/4ra.html</p>
<p onclick="$.get('/home/user/0/0a.html','',function(a){alert(a);});">
Get /home/user/0/0a.html</p>
<p onclick="$.get('/home/user/0/1/2/3/resources/3ra.html','',function(a){alert(a);});">
Get /home/user/0/1/2/3/resources/3ra.html</p>
</body></html>
这些文件位于本地文件系统上。使用的url是:

file:///home/user/0/1/2/3/4/test.html
通过直接从显示的页面复制URL,将URL输入web浏览器地址栏时,四个文件中的每个文件的内容都会按预期显示(
/home/user/0/1/2/3/4/4a.html
/home/user/0/1/2/3/4/resources/4ra.html
/home/user/0/0a.html
/home/user/0/1/2/3/resources/3ra.html

但是,通过以下方式访问文件:


然后,所有四个都按预期工作。

我首先关闭您的
标记,然后看看它是如何工作的

此外,您确实应该使用
$()绑定事件。绑定('click',function(){})
$()。单击(function(){})
,而不是单击

您是在使用Firebug,还是在查看错误控制台

我得到一个不匹配的标记。应为:

单击第一个标记后出错。但是,它们都适用于我

确保文件存在且路径正确

下面是一个更像jQuery绑定的版本:

<html>
  <head>
    <script type="text/javascript" src="file:////var/duck/js/jquery-1.4.2.js"></script>

    <script>
      $(document).ready(function(){
        $('#p_1').click(function(){
          $.get('/home/user/whatever.html','',function(a{alert(a);});
        });
      });
    </script>
  </head>
    <body>
      <p id='p_1'>
        Get /home/user/0/1/2/3/4/4a.html
      </p>
      <p id='p_2'>
        Get /home/user/0/1/2/3/4/resources/4ra.html
      </p>
      <p id='p_3'>
        Get /home/user/0/0a.html
      </p>
      <p id='p_4'>
        Get /home/user/0/1/2/3/resources/3ra.html
      </p>
    </body>
  </html>

$(文档).ready(函数(){
$('p#u 1')。单击(函数(){
$.get('/home/user/whatever.html','',函数(a{alert(a);});
});
});

Get/home/user/0/1/2/3/4/4a.html

Get/home/user/0/1/2/3/4/resources/4ra.html

Get/home/user/0/0a.html

Get/home/user/0/1/2/3/resources/3ra.html


为每个
填充绑定。实际上,有很多种方法可以将元素链接到首选文件—委派、数组、索引等。

我可能错了,但我感觉它失败了,因为
$.get()
在处理请求时遵循,由于/home/user/which不是有效链接,而是文件路径,因此在那里失败

我建议您花2分钟运行一个快速测试服务器,并在本地域中使用真实URL进行尝试

如果安装了Python,只需在终端中键入以下内容:

python -m SimpleHTTPServer

security.fileuri.strict\u origin\u policy
正在阻止访问。若要更正,请在地址栏中输入
about:config
,然后将
security.fileuri.strict\u origin\u policy的值从
true
更改为
false
,以访问所有使用scheme
文件的文件:
http:

从长远来看,这一信息的出发点来自Bartek对该术语的使用和年的维基百科链接

From-谷歌代码上的项目托管:

Firefox3是目前唯一的 使用基于目录的浏览器 同源访问的范围界定方案 在文件中://。这会带来一些风险 打破古怪的本地应用程序, 并且可能不会为客户提供保护 共享下载目录,但是 否则,这是明智的做法

来自Mozilla开发者中心:

从Gecko1.9开始,文件是 只允许阅读某些其他内容 文件。具体来说,文件可以读取 仅当父级 原始文件的目录为 目标的祖先目录 文件

但是,

新的 security.fileuri.strict\u origin\u策略 首选项,默认为true, 如果用户 不想严格执行 文件上的同源策略:URI

因此,后两个文件遇到了这个限制,可以通过更改
security.fileuri.strict\u origin\u策略来解决


请注意,在层次结构的其他部分启用访问不会授予比文件系统直接允许的更多的访问权限。

关闭标记不会产生任何更改。您知道不关闭它们会使每个部分成为以前元素的一部分,对吗?或者会,但是Firefox正在为您修复HTML。您必须关闭标记。此HTML无效。在IE中可能会更糟。奇怪,我关闭了它们,现在得到了
不匹配的标记。预期:。
。哦..显然FF对标记是区分大小写的。无论如何,我建议在jQuery中使用绑定事件,而不是onclick,这是一种过时的样式。请确保包含
$(文档).ready()
。它对我很有效,所以我认为它就是找不到您请求的文件。我也想到了相同的域限制,我听说有人在Ajax和file:///vs.使用实际的Web服务器时遇到了问题。不过,他说前两个是有效的。file:///home/user/0/0a.html 产生同样的结果。我不是这么说的你该怎么办?这两个文件在文件树中处于相同的级别或更低的级别,而失败需要访问高于起始目录的权限。我强烈建议安装(或使用,一个可能已经安装在Ubuntu上)一个网络服务器,也许是Apache。在网络服务器上开发是一个比文件好得多的计划。我看了你的简历,只是想说我吃了我在加利福尼亚朱利安吃过的最好的比萨饼。@Alex JL:我不明白,你没有在我家吃过。:-)罗蒙诺、蓬乔别墅(是的,玉米饼和比萨饼)或者Wynola披萨特快?可悲的是,我不知道,因为那是20多年前的事了,我才6岁!但从我还记得的时候起,它一定非常棒。就在镇上主要大道的某个地方。我发誓它就像一家开着摆动门的老西餐厅。。。
<html>
  <head>
    <script type="text/javascript" src="file:////var/duck/js/jquery-1.4.2.js"></script>

    <script>
      $(document).ready(function(){
        $('#p_1').click(function(){
          $.get('/home/user/whatever.html','',function(a{alert(a);});
        });
      });
    </script>
  </head>
    <body>
      <p id='p_1'>
        Get /home/user/0/1/2/3/4/4a.html
      </p>
      <p id='p_2'>
        Get /home/user/0/1/2/3/4/resources/4ra.html
      </p>
      <p id='p_3'>
        Get /home/user/0/0a.html
      </p>
      <p id='p_4'>
        Get /home/user/0/1/2/3/resources/3ra.html
      </p>
    </body>
  </html>
python -m SimpleHTTPServer