我遇到的问题是将定义的变量传递给ajax调用中的函数。应该发生的是点击一个元素,它应该将被点击的元素的文本传递给函数,做一个与定义的变量无关的ajax调用,将变量和数据从调用返回给另一个函数呈现元素。当我到达渲染html内容的函数时,变量现在是未定义的。
我的问题是如何将ajax响应数据和与ajax调用无关的用户定义变量发送到另一个函数?
我的JSON功能:
function getJSONP(url, data) {
return $.ajax(url, {
dataType: 'json',
data: data
});
}
我的点击事件:
$('.day').on('click', function() {
getTimes($(this).text());
});
我的第一个执行ajax的函数(这是选择器返回值的地方):
function getTimes(selector) {
console.log(selector);
var eventDate = selector;
getJSONP(CAL_API_URL).then(function(data) {
data = _.valuesIn(data)[5][0];
return data;
}).then(appendTimes(eventDate));
}
我的第二个渲染HTML的函数(此处选择器未定义):
function appendTimes(dates, selector) {
console.log(selector);
_.forEach(dates, function(k, v) {
// Returns each event
_.forEach(k, function(k2, v2) {
// Returns multiple objects for each event
var availableTimes = k2.startTime + " (" + k2.open + " spots left!)",
timeId = k2.id;
$('.timeslot select').append('<option data-id="' + timeId +'">' + availableTimes + '</option>');
});
});
}
答案 0 :(得分:2)
在这种情况下,如果您将appendTimes
切换为仅接受selector
并让它返回一个函数,则在数据可用时将调用返回的函数。
function appendTimes(selector) {
console.log(selector);
return function (datas) {
_.forEach(dates, function(k, v) {
// Returns each event
_.forEach(k, function(k2, v2) {
// Returns multiple objects for each event
var availableTimes = k2.startTime + " (" + k2.open + " spots left!)",
timeId = k2.id;
$('.timeslot select').append('<option data-id="' + timeId +'">' + availableTimes + '</option>');
});
});
}
}
答案 1 :(得分:1)
您正在调用该方法,而不是为其分配引用
}).then(appendTimes(eventDate));
需要使用闭包或绑定
}).then(function() { appendTimes(eventDate) });
你也不能从承诺中回来,所以return data
没用。