Я разрабатываю приложение для Netflix, используя их OData API. Я следил за записью в блоге Стивена Вальтера о том, как запрашивать 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
, приложение будет работать нормально. Мой вопрос: Есть ли проблема с выходом строки кода success
из вызова ajax? Или зачем нужно включать обе строки jsonpCallback
и success
? I в основном спрашиваю об этом из любопытства, потому что приложение, кажется, нормально работает без обеих линий обратного вызова.