jquery返回ajax响应和用户定义的变量到函数

jquery Return ajax response and user defined variable to function

本文关键字:变量 函数 定义 用户 返回 ajax 响应 jquery      更新时间:2023-09-26

我在从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>');
    });
  });
}

在这种情况下,如果将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>');
      });
    });
  }
}

您正在调用该方法,而不是为其分配引用

}).then(appendTimes(eventDate));

需要使用闭包或绑定

}).then(function() { appendTimes(eventDate) });

而且你不能从承诺中返回,所以return data是无用的。