假设我正在测试服务器子文件夹上的网站,例如http://12.123.12.12/domain.tld/
。当我在根页面上时,我可以愉快地做一个
$('#dummy').load('http://12.123.12.12/domain.tld/page.html')
(警告成功消息的回调函数会触发。)但是,如果我尝试
$('#dummy').load('http://12.123.12.12/domain.tld/folder/page.html')
我只在IE中收到'权限被拒绝'错误(同一来源政策错误)。
如果省略IP地址,即$('#dummy').load('/domain.tld/...')
,我会获得相同的成功/失败。我不知道为什么IE会像这样;它只是一个子文件夹。 (事实上,它是带有.html
扩展插件的Wordpress,但我看不出这是问题所在。)
编辑:事实证明,只有在加载我当前正在浏览的网页时,我才会拒绝该权限。例如,假设我的浏览器指向http://12.123.12.12/domain.tld/folder/page.html
,如果我再尝试
$('#dummy').load('http://12.123.12.12/domain.tld/folder/page.html')
然后发生错误。
答案 0 :(得分:1)
权限被拒绝来自same origin policy。从文件夹访问数据不会成为问题。我猜你的浏览器地址中的内容不是http://12.123.12.12/domain.tld
。
答案 1 :(得分:1)
因此,正如所描述的那样,确切的问题是IE不喜欢加载URL(如果已经在其上)。如果浏览器在任何子目录结构中的任何 http://123.12.12.12/domain.tld/page.html
处于page.html
,则以下jQuery将失败:
$('#container').load('http://123.12.12.12/domain.tld/page.html');
失败的特征是“权限被拒绝”错误,通常与同一原始政策相关。
要解决此问题,请在请求中附加一个虚拟对象,这会强制jQuery将其作为POST请求(而不是默认的GET)发送,例如:
$('#container').load('http://123.12.12.12/domain.tld/page.html', {one : 1});
并且负载现在按预期工作。