0

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

这是我的课程(已简化)——如果我在此处运行此代码,我将收到一个参考错误,“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 {

    };
};
4

2 回答 2

0

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

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

这基于OnConnect 的 v1 API 文档

于 2014-09-23T06:53:36.617 回答
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);
    }
});

演示:小提琴

于 2014-09-23T09:03:34.357 回答