jquery – 使用ajax从本地文件访问Web

前端之家收集整理的这篇文章主要介绍了jquery – 使用ajax从本地文件访问Web前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有点新的 JQuery和ajax,所以我道歉,如果这是一个新手的问​​题.

我正在尝试使用本地文件中的ajax来访问网络(例如,获取文本文件).
我没有使用IIS或任何东西,简单的文件从我的硬盘驱动器(我需要它保持这种方式).
检查IE8和Chrome(版本11.0.696.60).

这里有一些javascript来说明:

// use ajax to load from the web
$("#webText").click(function(){
    $.get("http://www.w3schools.com/jquery/demo_ajax_load.txt",function(result){
        alert(result);
});

代码正在尝试从Web加载文本文件 – 操作在IE和chrome上都失败(不会得到成功函数).
Chrome在错误控制台中通知“XmlHttpRequest无法加载_http://www.w3schools.com/jquery/demo_ajax_load.txt:Access-Control-Allow-Origin不允许Origin null”

// use ajax to load from a local file
$("#localText").click(function(){
    $.get("demo_ajax_load.txt",function(result){
        alert(result);
});

代码正在尝试从本地文本文件加载.
IE:操作成功.
Chrome:失败,与上述相同的错误.

在这一点上,我以为这是不可能从本地文件与网络通信,但后来我遇到了一个类似的问题:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin

使用这里给出的例子,我试过:

// use ajax to load json object from the web
$("#webJSON").click(function(){
    var url = 'http://www.panoramio.com/wapi/data/get_photos?v=1&key=dummykey&tag=test&offset=0&length=20&minx=-30&miny=0&maxx=0&maxy=150';
    $.get(url,function(json) {
        alert(json.photos[1].photoUrl);
    },"jsonp");
});

这个代码在两个浏览器上都很好用.显然,可以从本地文件与Web服务进行通信.

有任何想法吗?

BTW – 我对IE的这个方面更感兴趣,Chrome和其他浏览器不是一个问题.

谢谢.

解决方法

问题是您正在运行到 Same Origin Policy,它适用于所有“实际”ajax调用(实际使用XMLHttpRequest的调用).

IE的工作原理,但Firefox和Chrome并不简单:当原始文件是本地文件,并且您尝试检索的资源在网络上时,IE不会应用SOP.另一方面,Chrome和Firefox则适用于W3C的Cross-Origin Resource Sharing标准,所以包括相关的“这是我的起源,你能让我跟你说话吗?”标题 – 和w3schools说“不,我不会和你说话”. (“null”是本地机器的“起始值”).选择浏览器的乐趣是他们可以对这样的事情做出不同的设计决策.

你发现的代码没有做一个真正的ajax调用,它正在做JSON-P,它根本不使用XMLHttpRequest,所以绕过SOP,但只有GET操作(而不是POST),只有另一端支持它. (jQuery的get函数可以同时执行真正的ajax调用和JSON-P,关键在于它是dataType参数,在您显示的示例中是“jsonp”.)

你可能会发现this article有用.它描述了使用YQL(雅虎的HTML抓取服务)作为跨域代理,因为YQL支持JSON-P.

原文链接:https://www.f2er.com/jquery/176483.html

猜你在找的jQuery相关文章