使用带有ajax请求的success / jsonpCallback

我正在使用他们的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",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,errorThrown){
          alert(textStatus + ":" + errorThrown);
        } 
      });
    } else {
      processResults();
    }
  }

但是,当这个运行时,我不断得到一个parserError.似乎回调函数调用两次.如果我删除成功:回调行,应用程序工作正常.我的问题是:从ajax调用中离开成功代码行是否有问题?或者为什么有必要包括jsonpCallback和成功线?我主要是出于好奇而问这个问题,因为应用程序似乎在没有回调线的情况下工作正常.

根据您的代码尝试做的事情,我不确定为什么要在$.ajax调用中指定jsonpCallback和成功.我建议您只需指定成功,以便处理您的数据并处理您的分页.让jQuery定义你的jsonp回调的名字.

基本上jsonp回调正在做的是从WCF数据服务接收有效负载,然后将其交给成功处理程序.如果您希望在成功处理程序处理之前对数据进行一些缓存或其他预处理,则看起来您可以使用jsonpCallback.在这种情况下,我不确定为什么你要指定与jsonpCallback和成功处理程序相同的功能. (我简要地查看了斯蒂芬关于你链接文章,我不是他这样做的原因.)

下面是我在演示和会话中使用的WCF数据服务的jsonp调用示例(并且已经使用了一段时间).我使用JSONPSupportBehaviorAttribute来在我的WCF数据服务中启用JSONP(不确定这是否是您正在使用的).

但在我的示例代码中,我没有指定jsonpCallback名称;我只是指定了jsonp querystring参数(必须是$callback而不是认的回调),但我让jQuery命名为jsonp回调函数.

我的成功处理程序被调用一次,一切正常.所以我的建议是忘记jsonpCallback,保持你的成功处理程序,我认为事情应该开始更好地工作.

我希望这有帮助.如果您有后续问题,请告诉我.祝你好运!

$.ajax({
    url: 'http://server:25812/Services/AgileWays.Baseball.Service.svc/Teams?$format=json&$filter=yearID eq 1882',type: 'GET',dataType: 'jsonp',cache: false,jsonp: '$callback',error: function (x,t,r) { alert(x.response.message); },success: function (data) {
        $.each(data.d.results,function (i,val) {
            $("#results").append("<div>" + val.name + "</div>");
        });
    }
});

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...