Ajax Get возвращает неопределенный - PullRequest
0 голосов
/ 14 декабря 2018

Я абсолютный новичок в Rails и совершенно не понимаю, как исправить эту ошибку.Я пытаюсь вызвать метод get_info_from_iclass, который находится в моем rentals_controller в моем файле JavaScript.

$('document').ready(function () {

var iclass_field = document.getElementById("ic").getElementsByTagName("input")[0];
console.log(iclass_field == null);
let timeout;
iclass_field.addEventListener("input", () => {
clearTimeout(timeout);
 timeout = setTimeout(() => populateFields(iclass_field), 500);
  });

    function populateFields(iclass) {
      var temp = iclass.value;
      var studIC = parseInt(temp);
      $.ajax({
        type: "GET",
        url: "rentals/get_info_from_iclass",
        data: {studIC: studIC},
        dataType: 'text',
        async: false,
        success: function(data) {
          document.getElementById("fn").getElementsByTagName("input")[0].value = data.first_name;
          document.getElementById("ln").getElementsByTagName("input")[0].value = data.last_name;
          document.getElementById("em").getElementsByTagName("input")[0].value = data.email_address;
        },
            error: function(data) {
                alert("Fail");
            }
      });
  }
});

В конце концов, я пытаюсь заполнить другие поля в форме данными, возвращаемыми запросом БД, который я делаю, используя iclass в контроллере,Ниже приведен метод в моем контроллере, который я пытаюсь вызвать.

def get_info_from_iclass
   return User.where(iclass: params[:iclass]).last
  end

Однако, независимо от того, что я пытаюсь сделать, запрос возвращает undefined.Из поиска других тем в стеке потока я думаю, что это может быть связано с тем, что AJAX является асинхронным, и я должен что-то делать с методами обратного вызова (???).Опять же, я очень новичок в этом и хотел бы получить подробное объяснение того, что происходит, если это возможно с количеством информации, которую я дал.

EDIT

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

  success: update_form,
  error: function(data) {
      alert("Fail");
    }
  });
function update_form(data){
document.getElementById("fn").getElementsByTagName("input")[0].value = data.first;
..etc....

Может быть, так я запрашиваю базу данных?или как я работаю с типом данных?

1 Ответ

0 голосов
/ 14 декабря 2018

У вас более одной ошибки:

  • iclass_field.addEventListener ("нажатие клавиши", ignoreReturn (iclass_field));

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

  • if (key = 13) {

    Таким образом, вы присваиваете значение 13 вместо проверки самого значения

  • Поскольку вас не интересует \ n , вы можете упростить свой код с помощью события input .

  • Правильный способ передачи параметров в функцию jQuery get : {studIC: studIC}

Более того, если у вас естьформа и не хотите отправлять саму форму, вы можете предотвратить ее, используя событие .

$('document').ready(function () {

    var iclass_field = document.getElementById("ic").getElementsByTagName("input")[0];
    iclass_field.addEventListener("input", function (e) {
        populateFields(iclass_field); // you may use the this keyword.....
    });


    function populateFields(iclass) {
        var temp = iclass.value;
        var studIC = parseInt(temp);
        $.get("rentals/get_info_from_iclass", {studIC: studIC}, function (data) {
            alert('Success');
        });
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...