【问题标题】:Is it possible to use javascript to download JSON object from another domain/server?是否可以使用 javascript 从另一个域/服务器下载 JSON 对象?
【发布时间】:2011-01-11 21:04:33
【问题描述】:

该代码会是什么样子?

【问题讨论】:

    标签: javascript jquery json cross-domain


    【解决方案1】:

    您应该使用本地代理。设置一个asp.net/php页面,在后端加载远程页面,然后使用ajax加载代理页面。

    【讨论】:

      【解决方案2】:

      仅通过 JSONP。无论您使用 jQuery 还是其他框架,它都归结为这样的脚本块:

      <script type="text/javascript" src="http://path.to/your/javascript"></script>
      

      &lt;script&gt; 块不受跨域限制。需要注意的是,该服务也应该支持 JSONP。如果脚本返回这样的 JSON 对象:

      {a: 0, b: 1}
      

      对象将被评估但没有任何反应。但是 JSONP 服务接受类似这样的回调函数名称

      <script type="text/javascript" src="http://path.to/your/javascript?callback=yourCallbackFunction"></script>
      

      并将数据包装为回调的参数,如下所示:

      yourCallbackFunction({a: 0, b: 1});
      

      以便在评估脚本时调用该函数。

      【讨论】:

        【解决方案3】:

        其他域/服务器需要支持 JSONP,它基本上将 JSON 包装在回调中。

        在 jQuery 中,调用如下所示:

        $.getJSON(
             'http://otherdomain.com/api/whatever?callback=?', 
             { key: 'value', otherkey: true },
             function(data){
                //handle response
             }
        );
        

        来自其他服务器的实际响应(如果您查看实际发送的内容)如下所示:

        // With this url:
        http://domain.com/api/method?callback=the_callback_function_name
        
        // The response would look like this:
        the_callback_function_name({ "json": "data here"});
        

        当您提供额外的callback=? 时,jQuery getJSON 方法会自动处理 JSONP。请记住一些使用不同名称的网站,例如json_callback=?。重要的部分是您将其作为 URL 的一部分包含在内,并且不要尝试将 callback: '?' 添加到 getJSON 函数的 data 部分。

        【讨论】:

        • 根据我刚刚运行的测试,FF2、IE6 和 IE8(均具有默认安全设置)由于同源策略而阻止了此方法。 FF3.5 和 Safari4.0 没有。 IE 给出“权限被拒绝”错误消息。 FF2 给出了我在本页其他地方引用的错误消息。
        • @fsb 那么你运行了一个不正确的测试。抱歉,小伙伴们,但 JSONP 在目前任何具有任何市场份额的浏览器中都没有被阻止。
        • @fsb 使用您的默认安全设置,运行以下页面:jsbin.com/olixe。它可以在 FF2+、Safari 3+ 和 IE6+ 中运行——没有错误或限制。
        • 我运行的测试在 FF2 和 IE6 和 8 中产生了 Permission denied 错误,是从代码片段到您对问题的回答。我不叫巴德。
        • @fsb 很抱歉我在回复你时带有讽刺意味。我确实觉得你试图证明一项经过验证的技术行不通很有趣。
        【解决方案4】:

        您可以使用 JSONP。在 jQuery 中,尝试 getJSON:http://api.jquery.com/jQuery.getJSON/

        【讨论】:

          猜你喜欢
          • 2019-11-15
          • 2019-07-12
          • 1970-01-01
          • 2011-09-12
          • 2015-10-12
          • 1970-01-01
          • 2014-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多