【发布时间】:2011-11-02 07:23:17
【问题描述】:
我正在使用他们的 OData API 为 Netflix 开发一个应用程序。我关注了Stephen Walther's blog entry 如何查询 OData API。在其中,他使用了以下代码:
$.ajax({
dataType: "jsonp",
url: query,
jsonpCallback: "callback",
success: callback
});
在我的应用程序中,我需要使用 OData 的分页链接来检索完整列表。我的代码如下:
// create url and handle ajax call to Netflix
function getTitles() {
query = "http://odata.netflix.com/v2/Catalog" // netflix odata base url
+ "/Genres('Television')" // select Genre
+ "/Titles" // top-level resource
+ "?$select=NetflixApiId,Name,BoxArt,Synopsis,ReleaseYear,AverageRating,Series" // choose fields
+ "&$orderby=Name" // Sort results by name
+ "&$filter=Instant/Available eq true" // filter by instant view
+ " and Type eq 'Season'" // select only seasons
+ "&$expand=Series" // include series data
+ "&$callback=callback" // specify name of callback function
+ "&$format=json"; // json request
$.ajax({
dataType: "jsonp",
url: query,
jsonpCallback: "callback",
success: callback,
error: function(XHR, textStatus, errorThrown){
alert(textStatus + ":" + errorThrown);
}
});
}
// create seasons array and and repeat ajax call until all results are returned
function callback(result) {
seasons = seasons.concat(result["d"]["results"]);
if (typeof result["d"]["__next"] != 'undefined') {
var urlJSONP = result["d"]["__next"] + "&$callback=callback&$format=json";
$.ajax({
dataType: "jsonp",
url: urlJSONP,
jsonpCallback: "callback",
success: callback,
error: function(XHR, textStatus, errorThrown){
alert(textStatus + ":" + errorThrown);
}
});
} else {
processResults();
}
}
但是,当它运行时,我不断收到parserError。似乎回调函数被调用了两次。如果我删除 success: callback 行,应用程序工作正常。我的问题是:从 ajax 调用中留下 success 代码行有问题吗?或者为什么需要同时包含jsonpCallback 和success 行?我主要是出于好奇而问这个问题,因为如果没有两条回调线,应用程序似乎可以正常工作。
【问题讨论】: