当前位置: 首页 > 面试题库 >

使用Ajax从本地文件访问Web

雍阳
2023-03-14
问题内容

我对JQuery和Ajax有点陌生,所以如果这是新手的问题,我深表歉意。

我正在尝试使用本地文件中的ajax来访问Web(例如,获取文本文件)。
我没有使用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不允许使用原点null”

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

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

使用此处给出的示例,我尝试了:

// 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服务进行通信。

有任何想法吗?

顺便说一句-我对IE方面更感兴趣,Chrome和其他浏览器不再是问题。

谢谢。


问题答案:

问题是您遇到了Same Origin
Policy
,该策略适用于所有“实际”
ajax调用(实际使用的调用XMLHttpRequest)。

IE可以运行,但Firefox和Chrome不能运行的原因很简单:当源是本地文件且您要检索的资源在网络上时,IE不会应用SOP。另一方面,Chrome和Firefox应用了W3C
的跨域资源共享标准,因此包含了相关的“这是我的来历,您可以和我谈谈吗?”
标头-w3schools说“不,我不会和你说话。” (“
null”是本地计算机的“原始”值。)选择浏览器的乐趣在于,它们可以对类似的事情做出不同的设计决策。

您发现有效的代码并未执行真正的ajax调用,而是执行了JSON-P,它根本没有使用XMLHttpRequest,因此绕过了SOP,但仅用于GET操作(不支持POST),并且仅当另一端支持它时。(jQuery的get函数既可以执行实际的ajax调用,也可以执行JSON-P,其作用的关键是dataType参数,在您显示的示例中为“
jsonp”。)

您可能会发现本文很有用。它描述了使用YQL(来自Yahoo的HTML抓取服务)作为跨域代理,因为YQL支持JSON-P。



 类似资料:
  • 问题内容: 是否有使用JavaScript完成的本地文件操作?我正在寻找一种解决方案,该解决方案可以像安装Adobe AIR那样在没有安装空间的情况下实现。 具体来说,我想从文件中读取内容并将这些内容写入另一个文件。在这一点上,我不担心获得权限,只是假设我已经对这些文件拥有完全权限。 问题答案: 如果用户通过选择文件,则可以使用File API读取和处理该文件。 设计不允许读取或写入任意文件。这违

  • 问题内容: 我是angularjs的新手,我整天都在网上进行搜索,目的是找到一种解决方案,可以从本地json文件获取数据,而不必在我的webapp中使用本地主机。不幸的是,我还没有找到任何东西。我尝试使用$http.get,但收到Cross Origin *错误。 有没有其他方法可以从本地json文件中获取数据而不必在本地托管我的webapp? angularjs是否有其他功能可以从本地json文

  • 我正在使用Dropwizard web服务来访问许多parquet文件,我需要使用“真正的”sql(字符串)而不是spark DDL(我已经尝试过了,但没有满足我的需要)。我在独立模式下使用spark从eclipse启动服务。Spark版本是1.4.1。 问题是spark不能解析普通SQL中的parquet引用,如下所示:(我在./bro/conn.parquet中启动web服务的文件夹中有一个测

  • 问题内容: 有些脚本只能通过ajax使用,并且我不希望用户直接从浏览器运行这些脚本。我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中。 因此,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求。(我知道可以伪造http标头,但我想不出更好的解决方案)。我尝试了这个: ReWrite

  • 问题内容: 我们在apache服务器中托管的Web应用程序中使用Java库。库中的ReadConfFile方法返回文件未找到错误。方法如下 是否允许从Web应用程序访问本地文件系统?如果是,那么是否需要设置任何访问权限? 问题答案: 要快速回答您的问题:您可以从Web应用程序访问文件系统,但是必须检查应用程序服务器/ Web容器上如何配置SecurityManager(如果已安装)。 但是,您读取

  • 问题内容: 根据Same OriginPolicy,SOP不应应用于file://协议,但是为什么我的代码不起作用?我正在从本地系统运行此测试页面,并且与html页面位于同一目录中。如果我将URL更改为http://www.google.com/,它也无法正常工作。我不明白为什么,有人可以解释吗? 编辑: 控制台打印如下: XMLHttpRequest无法加载文件:/// C:/Users/yc/