Нечетная проблема с неработающим вызовом jQuery и работающим вызовом ajax - PullRequest
0 голосов
/ 28 мая 2019

Я использую область сеанса в ColdFusion и создал установщик и получатель AJAX. Когда я вызываю функцию jQuery для получателя, я получаю undefined, но внутри вызова jQuery я пишу в консоль, и значения верны. Я пробовал async: false в AJAX безрезультатно.

Я строю сложный каскад связанных объектов выбора, и мне нужно, чтобы они по умолчанию возвращались к последним выбранным значениям при перезагрузке каскада. Кто-нибудь сталкивался с этим? Я прочитал все, что могу найти в StackOverflow и не смог решить эту проблему, см. Пример кода ниже

AJAX-типы GET против POST, AJAX async: false, sessionManager и почти все остальное, что я нашел здесь.

По умолчанию session.ReportsShowAll = 1, но может измениться, поэтому я использую jgetValue(), чтобы получить самое последнее значение, и при создании выбора установите выбранную опцию на значение session.ReportsShowAll, которое есть в данный момент. Эта логика заполняется в различных областях, но я устраняю неполадки в одном экземпляре, который можно предсказать в другом месте.

Вызов AJAX записывает в консоль:

jgetValue: ReportsShowAll value: "1"

Однако настройка var sel получает undefined.

jgetValue = function(a) {
  $.ajax({
    url: "cfc/SessionMgr.cfc",
    type: "get",
    //async: false,
    dataType: "text",
    data: {
      method: "jgetValue",
      variablename: a
    },
    success: function(response) {
      console.log('jgetValue: ' + a + ' value: ' + response);
      return response;
    },
    error: function(msg) {
      console.log(msg);
    }
  });
}

здесь - модифицированная система обратного вызова, написанная в соответствии с дублирующим потоком.

getter = function(a) {
    var callback = jgetValue(a);
    return callback;
}


function getCallBack(response) {
    console.log('callback handler: ' + response);
    return response;
}

обработчик обратного вызова: "1"

  jgetValue = function(a) {

     $.ajax({
            url: "cfc/SessionMgr.cfc",
            type: "get",
            //async: false,
            dataType: "text",
            data: {
                method: "jgetValue",
                variablename: a
            },
          success: getCallBack //function(response) {
            //console.log('jgetValue: ' + a + ' value: ' + response);
           // getCallBack();
            //return response;
          //}
              ,
          error: function(msg) {
              console.log(msg);
          }
      });

}

оба метода до асинхронного вызова и после вызова все еще не устанавливают значение для объекта javascript, все еще считают его неопределенным.

var sel = jgetValue('ReportsShowAll');
...