类中的$ .ajax回调未定义 - 范围问题

时间:2014-09-23 06:36:33

标签: javascript jquery ajax gracenote

我正在尝试返回在给定半径内播放的电影放映时间列表。我有一个JavaScript类,我正在构建它来显示API中的数据。我实际上是按照here给出的例子。我知道这是一个某种类型的范围问题,因为如果我将我的回调函数(dataHandler)移到类之外,那么它可以正常工作。

这是我的课程(dumbed down) - 如果我运行此代码,因为它在这里我得到一个引用错误,“dataHander未定义”。

提前致谢!希望这里有足够的信息来帮助..

function Locator() {
    // Init
    function init(){
        test();
    };


    function test() {
        // construct the url with parameter values
        var apikey = "myapikey";
        var baseUrl = "http://data.tmsapi.com/v1";
        var showtimesUrl = baseUrl + '/movies/showings';
        var zipCode = "78701";
        var d = new Date();
        var today = d.getFullYear() + '-' + (d.getMonth()+1) + '-' + d.getDate();

        // send off the query
        $.ajax({
            url: showtimesUrl,
            data: { startDate: today,
                zip: zipCode,
                api_key: apikey,
                jsonp: "dataHandler"
            },
            dataType: "jsonp",
        });

        // callback to handle the results
        function dataHandler(data) {
            console.log(data);
        }

    };

    init();
    // Return
    return {

    };
};

2 个答案:

答案 0 :(得分:0)

尝试将$.ajax代码调整为以下内容:

$.ajax({
    url: showtimesUrl,
    data: {
        startDate: today,
        zip: zipCode,
        api_key: apikey
    },
    dataType: "jsonp",
    jsonp: "jsonp"
}).done(dataHandler);

这基于v1 API documentation for OnConnect

答案 1 :(得分:0)

我认为问题是你如何处理jsonp回调。

您正在使用名为jsonp的参数传递jsonp回调并传递函数名dataHandler,但函数dataHandler是方法test内的闭包方法。当响应返回时,名为dataHandler的方法将在不存在的全局上下文中搜索,从而导致错误。

您可以使用ajax处理程序success来处理返回的数据,如

// send off the query
$.ajax({
    url: '/echo/json/',
    data: {
        startDate: '',
        zip: '',
        api_key: ''
    },
    jsonp: 'jsonp',
    dataType: "jsonp",
    success: function (data) {
        console.log(data);
    }
});

演示:Fiddle