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

从localhost或file://访问JSON服务

缑高朗
2023-03-14
问题内容

我正在制作一个打算在PC上本地运行的html页面,最好不要在本地服务器上运行(file://)。我还使用jQuery使操作/ AJAX更加容易。

我正在尝试从twitter API加载2个结果,但出现错误。代码如下:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {},
    function (data) {
        $.each(data.items, doSomething1);
    });
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {},
    function (data) {
        $.each(data.items, doSomething2);
    });

我也尝试了以下代码,但没有改变结果。

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json",
    {
        count:          "9",
        screen_name:    "someuser"
    },
    function(data) {
        $.each(data.items, updateAWTweets);
    });
$.getJSON("http://search.twitter.com/search.json",
    {
        q:              "somequery",
        result_type:    "recent",
        count:          "9"
    },
    function(data) {
        $.each(data.items, updateHashTagTweets);
    });

我在chrome中(在本地服务器上)收到以下错误:

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin.

或(带有file://链接)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin.

有谁知道我该如何解决?


问题答案:

您遇到了同源策略限制-
您的脚本无法访问除加载域以外的任何其他域。

  1. 您可以尝试JSONP-这是跨域获取数据的一种常见解决方案:

    • http://www.chazzuka.com/blog/?p=221
    • http://jquery-howto.blogspot.com/2009/04/twitter-jsonjsonp-api-url.html

您的代码看起来像这样(注意callback=?URL的添加):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
          {},
          function (data) {
                  $.each(data.items, doSomething2);  
     });
  1. 另一个选择是设置代理-您可以将Apache httpd用作代理/反向代理来解决此限制。


 类似资料:
  • 我有一个应用程序,我必须访问连接到同一网络的所有pc及其MySql数据库,我还想远程连接到服务器。 实际上,我有一个下拉服务列表,每个服务都有一个库名。当我选择一个服务时,我想建立与数据库的连接,它要么位于同一个网络上,要么位于任何远程服务器上。 记住,我知道主机名、用户名、密码和数据库名。我正在使用mysqli_connect函数。 我尝试了网上提供的多种选择,但都是徒劳的。e、 g授予主机和用

  • 运行以下命令时:cmd/c c:\sonar-runner-2.4\bin\sonar-runner.bat (sonar runner安装在生成计算机上)我得到以下错误: 错误:无法访问sonar服务器“http://localhost:9000” 错误:sonar runner执行期间出错 错误:java.net.ConnectException:连接被拒绝:连接 错误:原因:连接被拒绝:连接

  • 我运行Jenkins,sonarqube每个docker和我在sonarqube docker安装声纳扫描仪。我在浏览器localhost:9000工作时检查了sonarqube,我在jenkins中配置了sonarqube和github repo,我在jenkins中构建了project,我得到了错误消息 下面是我在github存储库项目根目录中的sonar-project.properties

  • 问题内容: 我正在使用jQuery 1.4.2创建ajax应用,并且尝试使用get(),post()和ajax()方法本身。我的php服务返回: 在我的成功回调中,我尝试以json.status和json [0] [0]的身份访问,但它始终返回“ undefined”。我究竟做错了什么? 我已经搜索了好几天了。我该如何访问返回的数据?任何帮助,将不胜感激。 问题答案: 要访问该状态值,您需要: 这

  • 我已经构建了一些自定义封送器,我正在尝试访问消息服务。我有以下代码。 Resources.groovy 我得到以下异常 无法对空对象调用方法getMessage()。Stacktrace如下:java.lang.nullpointerException:无法在org.hri.leaverequest.marshaller.errorsmarshaller$_register_closure1_cl

  • 交叉起源没有发生,被CORS策略阻止。 我使用的是Windows系统。 在文件中: 在文件中: 我在浏览器控制台中遇到此错误: CORS策略阻止了从http://localhost:1111/api/v1/employees/createhttp://localhost:4200对XMLHttpRequest的访问:对预飞行请求的响应没有通过权限改造检查:请求的资源上没有访问控制允许起源标头。<-