【问题标题】:Can't load a file in ajax from my pc无法从我的电脑加载 ajax 文件
【发布时间】:2014-11-25 22:09:06
【问题描述】:

我需要在 ajax 中从我的电脑加载一个 xml 文件,但它的脚本在当前状态下无法运行(不知道为什么)。这是我所拥有的:

$.ajax({
    type: "GET",
    url : 'file:///C:/xampp/htdocs/files/license/index_skin.xml',
    dataType: "text",
    success : function (data) {
        $("#txarea").val(data);
    }
});

【问题讨论】:

  • 您是否检查了开发工具的网络选项卡以了解发生了什么?我猜这是url : 'C:/xampp/htdocs/files/license/index_skin.xml', 的路径。你试过url : '/license/index_skin.xml',吗?
  • @j08691 问题是我需要文件的完整路径,如果我只写'/license/index_skin.xml',它就可以工作,而且,我试过'file:///C:/ chrome 中的 xampp/htdocs/files/license/index_skin.xml' 并且它有效。我不知道是什么问题。

标签: jquery ajax xml load


【解决方案1】:

这里有多个问题:

  1. 文件 URL 不使用确切的窗口路径名称 c:\xxx。它们必须是实际的文件 URL。
  2. 所有浏览器都阻止“跨源”ajax 请求。跨源请求是 URL 的第一部分(协议、端口、域)与加载的页面不同的任何请求。这可以解释为什么它使用相对路径而不是绝对路径。您尝试使用的 URL 的第一部分可能与您从中加载页面的 URL 的第一部分不同。尝试此操作时的页面 URL 是什么?
  3. 即使 HTML 文件是本地的并且来源相同,某些浏览器也不允许您从本地磁盘加载任何文件(出于安全原因)。

【讨论】:

  • 目前我正在使用本地主机,所以页面 URL 是localhost。另外,我知道当您尝试从“输入文件”表单中获取值时,chrome 正在使用“fakepath”,这就是为什么我试图以其他方式获取我电脑上文件的完整路径。
  • @RaduDascălu - 我建议您阅读 this page 的同源请求。它可能解释了如果您的网页是从 localhost 加载的,为什么您不能使用 file:// URL。
  • 所以真的没有办法通过本地主机上的 ajax 脚本访问我电脑上的文件吗?
  • @RaduDascălu - 假设您实际上有一个在 localhost 上运行的 Web 服务器,您可以创建一个服务器响应的路由,并让服务器获取文件并将其作为对路由的响应返回。您不能直接从浏览器访问任意文件系统 URL。因此,您可以修改您的服务器,以便从您的服务器 http://localhost/license/index_skin.xml(或任何对您最有意义的 URL)请求此 URL 实际上返回 C:/xampp/htdocs/files/license/index_skin.xml 的内容。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2023-02-14
  • 2011-12-22
  • 2013-06-06
  • 2015-05-13
  • 2017-11-12
相关资源
最近更新 更多