Ajax调用返回函数代替数据

时间:2019-07-19 12:32:16

标签: javascript jquery httpresponse jquery-deferred

我通过jquery $ ajax调用发出请求,但是它返回回调函数本身,而不是正确的数据响应,并显示消息“ ReferenceError:未定义recapCB”;

var recapMonthDEF = $.ajax({
        type: 'get',
        url: getAnalyticsApiURL('recapMonth'),
        dataType: 'jsonp',
        contentType: "application/json",
    });

    $.when(lastMonthSessionsDEF, recapMonthDEF).always(function(){
        $('#Dashboard-tabs-1 .toggle input[type="checkbox"]').removeAttr('disabled');
    });

    recapMonthDEF.always(recapCB);



    var recapCB = function(response){

        if($('#newUsers').length == 0) return;

        data = response;

        var percent = parseFloat(parseFloat(data.percentNewSessions).toFixed(1));
        var percentDiff = parseFloat((100 - percent).toFixed(1));

        var sessionDuration = moment().startOf('day').seconds(data.sessionDuration).format('H:mm:ss');

        $('#analitycs-session').html(data.sessions);
        $('#analitycs-users').html(data.users);
        $('#analitycs-pageviews').html(data.pageviews);
        $('#analitycs-sessionsPerUser').html(parseFloat(data.sessionsPerUser).toFixed(2));
        $('#analitycs-sessionDuration').html(sessionDuration);
        $('#analitycs-newUsers').html(data.newUsers);

    };

屏幕截图 Screenshot

1 个答案:

答案 0 :(得分:1)

  

但它会返回回调函数本身

您的屏幕截图未显示回调函数。它显示了一个jqXHR对象。

请参见documentation

  

jqXHR.always(function(data(j | jqXHR,textStatus,jqXHR | errorThrown){}); (在jQuery 1.6中添加)
  完整的回调选项,.always()方法替换不推荐使用的方法   .complete()方法。

     

为响应成功的请求,该函数的参数为   与.done()的相同:data,textStatus和jqXHR对象。对于   失败的请求的参数与.fail()的参数相同:   jqXHR对象,textStatus和errorThrown。请参考deferred.always()   有关实施细节。

由于获得了jqXHR对象,因此必须触发错误状态。

最可能的原因是您所使用的URL没有给出JSONP响应。


  

ReferenceError:未定义recapCB

尝试在之后的行上定义recapCB