Я абсолютный новичок в 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....
Может быть, так я запрашиваю базу данных?или как я работаю с типом данных?