首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ajax Get返回未定义

Ajax Get返回未定义
EN

Stack Overflow用户
提问于 2018-12-14 05:09:41
回答 1查看 68关注 0票数 0

我是一个完全的Rails初学者,我完全不知道如何修复这个错误。我正在尝试调用rentals_controller中javascript文件中的get_info_from_iclass方法。

代码语言: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进行的db查询返回的数据填充表单中的其他字段。下面是我正在尝试调用的控制器中的方法。

代码语言:javascript
复制
def get_info_from_iclass
   return User.where(iclass: params[:iclass]).last
  end

然而,无论我怎么尝试,请求都会返回未定义的结果。通过搜索其他堆栈溢出主题,我认为这可能与AJAX是异步的这一事实有关,我必须使用回调方法(?)。再一次,我在这方面非常新手,如果我给出的信息量可能的话,我希望能深入解释正在发生的事情。

编辑

我试着使用回调函数,但是,我遇到了同样的问题,我的数据是未定义的。

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

这可能是我查询数据库的方式吗?或者我处理数据类型的方式?

EN

回答 1

Stack Overflow用户

发布于 2018-12-14 05:47:05

您有多个错误:

  • iclass_field.addEventListener("keypress",ignoreReturn(iclass_field));

通过这种方式,您可以立即调用该函数,并且由于该函数返回时未定义,因此该处理程序将永远不会被调用。但是,您再次在函数中添加了处理程序。

  • if(

= 13) {这样,您可以指定值13,而不是测试值本身,因为您对

  • 不感兴趣\n您可以使用事件简化代码。

  • 将参数传递给<代码>C11函数的正确方法是<>E112input >{studIC: code

此外,如果您有一个表单,但不想提交表单本身,则可以使用submit event阻止它。

代码语言:javascript
复制
$('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');
        });
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53770103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档