【问题标题】:IE7 & jquery ajax XML: permission denied on local xml fileIE7 & jquery ajax XML:本地 xml 文件的权限被拒绝
【发布时间】:2012-08-09 09:24:31
【问题描述】:
$('.upload').change(function () {
    var $container = $('#container');
    $container.find('input:checkbox, input:text, select').val('');

    var $thisUpload = $(this);
    var path = 'file:///' + $thisUpload.val().replace(/\\/g, "/");

    $.ajax({
        url: path,
        dataType: 'xml',
        success: function (data) {
        },
        error: function (request, status, error) {
            if (error.message == 'Permission denied') {
                //this is where i end up
            }
        }
    });
});

我知道“被阻止”的文件会在 IE 中导致此错误:

但是,此文件未被阻止。它位于包含上述代码的 .html 文件旁边。

什么可能导致“权限被拒绝”。我非常怀疑这是由于相同的原产地政策。

非常感谢任何帮助。谢谢

编辑:这只发生在我使用 ie7 的 windows xp 计算机上。 win7中的ie7-mode效果很好。

编辑 #2:这仅适用于作为邮件附件下载的 xml 文件。

【问题讨论】:

  • 你能举个例子吗?
  • @cuzzea 因为我在不同的计算机上试用它似乎有所不同,所以我认为我不能提供一个例子。如果你想尝试一下,在ie中下载一个xml文件使用上面的代码。
  • 发生错误的xml文件和不在同一目录中的xml文件是?
  • @star 他们在同一个目录下
  • 谁对所有答案投了反对票,为什么?

标签: jquery xml ajax internet-explorer-7


【解决方案1】:

您说这只发生在作为邮件附件下载的xml文件并且仅在win xp上。可能是某个杀毒软件或您的电子邮件客户端阻止了 xml 附件,您是通过 WWW 客户端还是某些桌面客户端下载附件?

【讨论】:

  • 我应该补充一点,从网上下载的一些 xmls 也会发生错误。问题是我不知道正在运行的文件和未运行的文件之间有什么不同。
【解决方案2】:

听起来您面临与现有帖子 jQuery AJAX problem in IE7 (possibly other versions as well) 相同的问题,其中通过编写代码以在不使用 jQuery(创建 XMLHttpObject、onreadystatechange 等)的情况下进行 ajax 调用并使用 jQuery 解析来解决该问题XML。

【讨论】:

    【解决方案3】:

    出于明显的安全原因,您不能通过 AJAX 访问这样的本地文件。

    请注意,file:/// 协议指向正在执行代码的客户端计算机的本地文件系统。

    如果文件在您的服务器上,您应该能够修改路径以指向服务器位置。

    【讨论】:

    • 实际上,我可以。这个问题只发生在我的 xp 机器上。很抱歉没有提到这一点
    【解决方案4】:

    只需删除 file:/// 并给出路径本身。这意味着给出路径/文件名.xml

    【讨论】:

    • 谢谢,但我担心我需要 file:/// 用于 ie 中的本地 xml 文件。否则它不会工作
    【解决方案5】:

    这更像是一个提示而不是一个答案,但它渴望发表评论。

    抱歉,在 W7 IE7(不是 IE9 浏览器模式)上无法重现,在我的 XP 虚拟机上我也无法重现,所以我可以帮助您解决一些问题。

    你可以用非缩小版调试jquery.ajax,我知道IE7缺少开发者工具可以调试,但是你可以安装IE7开发者工具,效果会很差,但也许可以,如果不行,你会需要使用ether alerts,或者创建自己的console.log:

    <div id="console" style="height:100px;position:fixed;bottom:0;left:0;rigth:0"></div>
    
    function log(e){
        $('#console').prepend($('<div>').html(e))
    }
    

    你可以开始看 功能完成(状态,nativeStatusText,响应,标题) 在 ajax:函数(url,选项)

    您需要查找错误发生的原因以及这是 jQuery 错误还是 IE7 错误。抱歉,我无法提供更多帮助。

    【讨论】:

    • 非常感谢。我实际上知道正在抛出什么错误;它的“权限被拒绝”。我的问题是我无法弄清楚为什么它只出现在某些文件上。
    • 我不认为这是一个问题,但是您是否检查了IE的Internet选项或其他相关设置中的“允许来自其他域的数据”设置?我也知道在 ie 中你可能需要使用 XDomainRequest,而不是 XMLHttpRequest 来处理这种东西,也许 jQuery 没有实现(我不这么认为)?
    • 好主意,我一到我的 xp 机器就试试。我会及时通知你的。谢谢
    【解决方案6】:

    我非常怀疑这是由于同源政策造成的。

    你确定吗?您如何访问执行 ajax 请求的页面(页面的 url)? 请记住,如果您将浏览器指向:

    http://localhost.loc/page.that.does.the.ajax.request.html

    并且ajax请求会尝试访问file:///方案,由于同源策略会失败

    【讨论】:

    • 我可以将 2 个 xml 文件放在同一个文件夹中,并获得其中 1 个被拒绝的权限。另一个成功打开。你仍然认为这可能是问题吗?
    • 这是我的猜测,尝试从文件系统加载带有 ajax 代码的网页,而不是通过 url 访问,看看会发生什么。喜欢:file:///htmls/page.with.ajax.response.html
    • 感谢您的提示,我会尽快尝试
    猜你喜欢
    • 2017-10-09
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2011-06-13
    相关资源
    最近更新 更多