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 文件旁边。

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

任何帮助深表感谢。谢谢

编辑:这只发生在我使用 ie7 的 windows xp 电脑上。win7中的ie7-mode运行良好。

编辑#2:这只发生在作为邮件附件下载的 xml 文件中。

4

6 回答 6

2

你说这只发生在作为邮件附件下载的xml文件并且只在win xp上。也许某些防病毒应用程序或您的电子邮件客户端阻止了 xml 附件,您是通过 WWW 客户端还是某些桌面客户端下载附件?

于 2012-08-28T12:13:05.610 回答
2

听起来您面临与IE7 中现有的 jQuery AJAX 问题相同的问题(可能还有其他版本),其中通过编写代码以在不使用 jQuery 的情况下进行 ajax 调用(创建 XMLHttpObject、onreadystatechange 等)解决了这个问题) 并使用 jQuery 解析 XML。

于 2012-09-04T07:08:55.673 回答
1

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

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

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

于 2012-08-09T09:27:22.347 回答
1

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

于 2012-08-31T08:53:06.783 回答
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 中查看函数 done(status, nativeStatusText,responses, headers):function(url, options)

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

于 2012-08-31T18:43:06.387 回答
0

我非常怀疑这是由于相同的原产地政策。

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

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

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

于 2012-09-04T11:20:56.767 回答