簡體   English   中英

jquery返回ajax響應和用戶定義的變量來起作用

[英]jquery Return ajax response and user defined variable to function

我有一個問題是將定義的變量傳遞給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是無用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM