2012-02-09 61 views
2

我想從jQuery腳本中的遠程域(Zencoder視頻編碼API)中檢索JSON格式的數據。當腳本運行時,它返回代碼200,但Firebug在地址上顯示錯誤(粗體紅色突出顯示,帶有X的圓圈),並且響應爲空。從遠程域檢索JSON,jQuery

這裏是與這個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"} 

最後,這裏是由螢火蟲返回的響應頭:

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

+0

那麼,你不能向外部域發出Ajax請求,它違反了同源策略。 – 2012-02-09 16:14:59

回答

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 parm。 在這裏看到具體的數據類型節在這裏:http://api.jquery.com/jQuery.ajax/

data PARM在成功的功能將包含對象(不只是一個JSON字符串,而是由JSON字符串表示的對象)。

+0

他們的API文檔確實提到了JSONP,指出您需要使用以下URL格式:'https://app.zencoder.com/api/v2/jobs/1234/progress.js?api_key = asdf1234&callback = asdf',其中回調是可選的。我嘗試了這個網址,並得到了相同的結果 - 代碼200,錯誤指示,沒有迴應。我是否需要更改代碼或URL(本質上,'.js'而不是'.json')? – NightMICU 2012-02-09 16:19:27

+0

'callback = asdf'表示它們接受jsonp請求。只需在我的答案中使用格式,jQuery將處理它。 – 2012-02-09 16:27:47

+0

很高興我能幫到你。 – 2012-02-09 16:33:12

0

您可以將callback=?附加到URL查詢嗎?這應該工作,假設服務器支持JSONP。