【问题标题】:Accessing URL-based API访问基于 URL 的 API
【发布时间】:2012-01-02 08:44:33
【问题描述】:

我用 PHP 开发了一个 Web 应用程序来列出我硬盘中的所有电影。我找到了一个网站http://www.deanclatworthy.com/imdb/,它提供了 IMDB API。现在我需要使用一些参数向这个 URL 发出请求。但是由于这个跨站点请求,我无法成功获得响应。

有什么方法可以使用这个 API 吗?

我在 localhost 中运行我的应用程序。我在 Firefox 和 Chrome 中都进行了测试,得到了 Access-Control-Allow-Origin 错误。

感谢任何帮助。

【问题讨论】:

    标签: api xmlhttprequest cross-domain


    【解决方案1】:

    也许使用套接字将请求代理到本地服务器端 php 脚本,然后将数据中继回您的 JavaScript?

    【讨论】:

    • 你能再解释一下吗。我对此很陌生。谢谢你的回答..
    • 我假设您是从 JavaScript 发出请求。我建议也许改为将参数传递给您盒子上的 php 脚本,该脚本使用套接字 (php.net/manual/en/function.fsockopen.php) 将来自远程主机 api 的响应转发回您的 JavaScript。请求 -> 本地 php 脚本 -> 远程主机 -> 本地 php 脚本 -> 请求者
    【解决方案2】:

    您要使用的 API,支持 JSON 作为响应类型。这意味着您可以轻松地使用 Javascript 从此 API 获取数据。下面是一个应该适合你的示例代码(使用 jQuery)-

    <html>
        <head>
            <script src="http://code.jquery.com/jquery-latest.js"></script>
        </head>
        <body>
            <script type="text/javascript">
                function imdbapi(data){
                      var items = [];
                      $.each(data, function(key, val) {
                        items.push('<li>' + key + "=>" + val + '</li>');
                      });
    
                      $('<ul/>', {
                        'class': 'my-new-list',
                        html: items.join('')
                      }).appendTo('body');
                }
    
                $(document).ready(function(){
                    $.ajax({
                      url: 'http://www.deanclatworthy.com/imdb/?q=Star+Trek&type=jsonp',
                      dataType: 'jsonp'
                    });
                });
            </script>
        </body>
    </html>
    

    【讨论】:

    • 问题在于,浏览器限制了对http请求的跨域访问。您是否尝试从本地主机脚本从 deanclatworthy.com 获取数据?如果不尝试并发布您收到的回复。
    • 您似乎没有尝试该脚本。是的,它确实可以在您的浏览器中使用。您错过了 $.ajax 中的“dataType:jsonp”,它强制执行跨浏览器 JSON 请求。试试上面的代码 sn-p。
    猜你喜欢
    • 2016-01-10
    • 2020-09-24
    • 2013-09-05
    • 2016-03-27
    • 2018-02-20
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多