【问题标题】:Retrieving JSON from remote domain, jQuery从远程域检索 JSON,jQuery
【发布时间】:2012-02-09 16:13:04
【问题描述】:

我正在尝试在 jQuery 脚本中从远程域(Zencoder 视频编码 API)检索 JSON 格式的数据。当脚本运行时,它返回代码 200,但 Firebug 在地址上显示错误(粗体红色突出显示,带有 X 的圆圈),并且响应为空。

这是与此相关的 jQuery 脚本:

var checkStatus = function(jobID) {
        var url = 'https://app.zencoder.com/api/v2/jobs/' + jobID + '/progress.json?api_key=asdad3332d';
        $.getJSON(url, function(data) {
            if (data.state == 'processing') {
                    //Do things to indicate job is still going
                    //Repeat this function to check status again
                    setTimeout(function() {
                        checkStatus(jobID);
                    }, 6000);
                } else if (data.state == 'finished') {
                    //Do some stuff
                } else if (data.state == 'failed') {
                    //Show errors, do other stuff
                }
            });
     };

这是一个返回的 JSON 示例。

{"outputs":[{"id":18492554,"state":"finished"},{"id":18492553,"state":"finished"},{"id":18492555,"state":"finished"}],"input":{"id":12437680,"state":"finished"},"state":"finished"}

最后,这是 Firebug 返回的响应头:

Response Headers
Cache-Control   private, max-age=0, must-revalidate
Connection  close
Content-Length  174
Content-Type    application/json; charset=utf-8
Date    Thu, 09 Feb 2012 16:06:13 GMT
Etag    "48f2d50a838e0e1e433f7c0ba197e787"
Server  ZenServer 0.1.0
X-Zencoder-Rate-Remaining   4999

任何帮助将不胜感激。在这个问题上摸不着头脑

文档 这是有关获取工作进度的 API 文档,这是我正在尝试做的。 https://app.zencoder.com/docs/api/jobs/progress

【问题讨论】:

  • 好吧,你不能向外部域发出 Ajax 请求,它违反了同源策略。

标签: jquery json getjson


【解决方案1】:

您需要将 jsonp 用于跨域请求,并且服务器需要能够接受 jsonp 请求并适当地回答。

$.ajax({
    url: 'https://app.zencoder.com/api/v2/jobs/1234/progress.js?api_key=asdf1234',
    dataType: 'jsonp',
    success: function(data){// your code here
    }
});

jQuery 将自动附加 callback=blah 参数。 请参阅此处的 dataType 部分:http://api.jquery.com/jQuery.ajax/

success 函数中的 data 参数将包含对象(不仅仅是 JSON 字符串,而是 JSON 字符串表示的对象)。

【讨论】:

  • 他们的 API 文档确实提到了 JSONP,说明您需要使用以下 URL 格式:https://app.zencoder.com/api/v2/jobs/1234/progress.js?api_key=asdf1234&callback=asdf,其中回调是可选的。我尝试使用此 URL 并得到相同的结果 - 代码 200,错误指示,无响应。我需要更改代码还是只更改 URL(本质上是 .js 而不是 .json)?
  • callback=asdf 表示他们接受 jsonp 请求。只需在我的答案中使用格式,jQuery 就会处理它。
【解决方案2】:

您可以将callback=? 附加到 URL 查询吗?假设服务器支持 JSONP,这应该可以工作。

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 2017-08-10
    • 2016-06-06
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多