我正在尝试返回在给定半径内播放的电影放映时间列表。我有一个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 {
};
};
答案 0 :(得分:0)
尝试将$.ajax
代码调整为以下内容:
$.ajax({
url: showtimesUrl,
data: {
startDate: today,
zip: zipCode,
api_key: apikey
},
dataType: "jsonp",
jsonp: "jsonp"
}).done(dataHandler);
答案 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