IE7和jQuery的Ajax XML:本地XML文件权限被拒绝

10
$('.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中,“被阻止”的文件可能会导致这个错误:

http://webactivedirectory.files.wordpress.com/2011/10/unblockfile.png

然而,该文件并未被阻止。它位于包含上述代码的我的.html文件旁边。
可能是什么原因导致了“权限被拒绝”。我非常怀疑这是由于同源策略引起的。
非常感谢任何帮助。谢谢。
编辑:这只发生在我的Windows XP计算机上使用IE7时。Win7中的IE7模式效果很好。
编辑#2:这仅适用于作为邮件附件下载的XML文件。

你能给一个可行的例子吗? - cuzzea
@cuzzea 由于我在不同的电脑上尝试时发现结果不同,所以我无法提供示例。如果您想尝试,请在IE中使用上面的代码来下载XML文件。 - Johan
出现错误的 XML 文件和没有出现错误的 XML 文件是否在同一个目录下? - UIlrvnd
@star 它们在同一个目录中。 - Johan
谁给所有答案点了踩,为什么? - Vlad Balmos
@VladBalmos 别看着我,我没有给任何人点踩。 - Johan
6个回答

2

2
你说这种情况只会在下载作为邮件附件的XML文件并且仅在Win XP上出现。可能是某些杀毒软件或电子邮件客户端阻止了XML附件,你是通过网络客户端还是桌面客户端下载附件的呢?

我应该补充说明一下,错误也会发生在从网络上下载的某些XML文件中。问题在于我不知道工作正常的文件和不正常的文件之间有什么不同。 - Johan

1

这更像是一个提示而不是答案,但对于评论来说太长了。

抱歉,在W7 IE7(非IE9浏览器模式)上无法重现,在我的XP虚拟机上也无法重现,所以我能为您提供一些指针。

您可以使用未压缩版本调试jquery.ajax,我知道IE7在开发人员工具方面存在缺陷,但您可以安装IE7开发人员工具,它可能效果不佳,但也许会起作用,如果不行,您将需要使用警报或创建自己的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))
}

您可以开始查看 ajax: function( url, options ) 中的 function done( status, nativeStatusText, responses, headers )。

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


非常感谢。我知道出现了什么错误,它是“权限被拒绝”。我的问题是我无法弄清为什么它只会发生在某些文件上。 - Johan
我认为这不是一个问题,但你有在IE的Internet选项或其他相关设置中检查“允许来自其他域的数据”的设置吗?此外,我知道在ie中,您可能需要使用XDomainRequest而不是XMLHttpRequest来处理这种情况,也许jQuery没有实现它(我不这样认为)? - cuzzea
好主意,我一到我的XP机器上就会尝试。我会保持更新的。谢谢。 - Johan

1

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


谢谢,但我担心在IE中需要使用file:///来访问本地XML文件。否则它将无法工作。 - Johan

1

出于明显的安全原因,您无法通过 AJAX 访问本地文件。

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

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


1
实际上,我可以解决问题。这个问题只在我的XP机器上出现。抱歉没有提到。 - Johan

0
我非常怀疑这是由于同源策略引起的。
你确定吗?你是如何访问执行ajax请求的页面(页面的url)的? 请记住,如果你将浏览器指向:

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

当ajax请求尝试访问file:///协议时,由于同源策略的限制,它将失败。


我可以把两个XML文件放在同一个文件夹中,其中一个会被拒绝访问。另一个可以成功打开。您认为这可能是问题吗? - Johan
这是我最好的猜测,尝试使用来自文件系统的ajax代码加载网页,而不是通过url访问,看看会发生什么。例如:file:///htmls/page.with.ajax.response.html - Vlad Balmos
谢谢你的提示,我会尽快尝试。 - Johan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接