【问题标题】:How to access data from ajax call after the ajax call endsajax调用结束后如何访​​问ajax调用中的数据
【发布时间】:2017-03-30 05:24:04
【问题描述】:

我正在做一个 ajax 调用,它会从服务器返回一些数据。我在来自 ajax 调用的数据上处理字符串函数。据我所知,我可以看到字符串操作在 ajax 调用结束之前开始。经常给我未定义的错误。这是我的ajax调用

 $.ajax({

        type: "POST",
        url: "/add_director",
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        success: function(data) {
            $('#addDirModal').modal('hide');
            insertDirector(data); 
        },
        error : function(xhr ,status ,error)
        {
            console.log(xhr);
            alert(xhr);
        }
    });

这是我的 insertDirector 函数

function insertDirector(data){
      console.log(data);
      if (data.msg == "1") {
        $.each(data,function(key,value){
            var dir_name = value.dir_name;
            var dir_pan = value.dir_pan;
            var dir_din = value.dir_din;
            var dir_addr = value.dir_addr;
            var dir_id = value.id;
            var dir_img = value.dir_img;

              if (dir_name.val().length > 15) {
                var dir_r_name = dir_name.substr(0,15);
              }

              else{
                var dir_r_name = dir_name;
              }
         });
        }
       }

在这里,当我处理 substr() 时,它会抛出错误 Cannot read property 'val' of undefined。我可以看到这是因为 substr() 在 ajax 请求完成之前执行。我该如何解决 ?

已编辑

这是回复

{"msg":"1","director":{"dir_name":"Naveen","dir_pan":"AAAAA1111B","dir_din":"123456","dir_addr":"dsadasdasdasdsadasdas","dir_img":"1490852438.jpg","user_id":3,"updated_at":"2017-03-30 05:40:38","created_at":"2017-03-30 05:40:38","id":15}}

【问题讨论】:

  • 一切都必须在success 方法中发生。
  • “数据”响应的值是多少?
  • 它有 json 响应。
  • 解决这个问题的另一种方法是创建一个函数作为逻辑的包装器,并将函数中成功的响应对象作为参数传递。然后就可以在成功使用这个函数了。
  • value.dir_name 怎么有.val() 方法?那必须是一个 jQuery 元素。我对此表示怀疑,除非那是一些奇怪的数据。

标签: javascript jquery ajax


【解决方案1】:

不清楚你为什么在这里使用$.each(你可以省略它并使用data.director而不是value),但是如果你的数据可能包含多个“director”对象并且你想要迭代通过所有这些,那么您应该更改 insertDirector 代码以跳过“msg”键,因为它没有 dir_name, dir_plan, ... 属性:

function insertDirector(data) {
  console.log(data);
  if (data.msg == "1") {
    $.each(data, function (key, value) {
      if (key == "director") { //or if (key != "msg")
        var dir_name = value.dir_name;
        var dir_pan = value.dir_pan;
        var dir_din = value.dir_din;
        var dir_addr = value.dir_addr;
        var dir_id = value.id;
        var dir_img = value.dir_img;

        var dir_r_name = (dir_name.length > 15 ? dir_name.substr(0, 15) : dir_name);
        //if (dir_name.length > 15) {
        //  var dir_r_name = dir_name.substr(0, 15);
        //}
        //else {
        //  var dir_r_name = dir_name;
        //}
      }
    });
  }
}

另外,请注意dir_name.val().length 是错误的,因为 dir_name 是一个字符串(.val() 不是必需的)

【讨论】:

  • 关于写这个作为自己的答案。这正是我所做的。
【解决方案2】:

改变

if (dir_name.val().length > 15) {
  var dir_r_name = dir_name.substr(0,15);
}

if (dir_name.length > 15) {
  var dir_r_name = dir_name.substr(0,15);
}

【讨论】:

    【解决方案3】:

    试试这个方法:

    function insertDirector(data) {
        console.log(data);
        if (data.msg == "1") {
    
            var dir_name = data.director.dir_name;
            var dir_pan = data.director.dir_pan;
            var dir_din = data.director.dir_din;
            var dir_addr = data.director.dir_addr;
            var dir_id = data.director.id;
            var dir_img = data.director.dir_img;
    
            if (dir_name.length > 15) {
                var dir_r_name = dir_name.substr(0, 15);
            }
    
            else {
                var dir_r_name = dir_name;
            }
    
        }
    }
    

    【讨论】:

    • 关于写这个作为自己的答案。这正是我所做的。
    【解决方案4】:

    看到您发布的数据后,很容易发现问题。 这里的问题是:

    你的功能:

    function insertDirector(data){
          console.log(data);
          if (data.msg == "1") {
            $.each(data,function(key,value){
                var dir_name = value.dir_name;
                var dir_pan = value.dir_pan;
                var dir_din = value.dir_din;
                var dir_addr = value.dir_addr;
                var dir_id = value.id;
                var dir_img = value.dir_img;
    
                  if (dir_name.val().length > 15) {
                    var dir_r_name = dir_name.substr(0,15);
                  }
    
                  else{
                    var dir_r_name = dir_name;
                  }
             });
            }
           }
    

    这里,当你执行 $.each 时,data 中的每个对象都会被遍历。现在,data 中的第一个值是 msg:1。这不是一个对象。结果,在第一次迭代中,key 是 'msg' 但 value 是 '1'。现在这个值不能有 dir_name 所以返回 undefined。结果 dir_name.val() 会产生错误。

    试试这样:

    function insertDirector(data){
          console.log(data);
          if (data.msg == "1") {
            $.each(data,function(key,value){
                if(key==="director"){
                var dir_name = value.dir_name;
                var dir_pan = value.dir_pan;
                var dir_din = value.dir_din;
                var dir_addr = value.dir_addr;
                var dir_id = value.id;
                var dir_img = value.dir_img;
    
                  if (dir_name.val().length > 15) {
                    var dir_r_name = dir_name.substr(0,15);
                  }
    
                  else{
                    var dir_r_name = dir_name;
                  }
                }
    
             });
            }
           }
    

    【讨论】:

      猜你喜欢
      • 2011-08-12
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      相关资源
      最近更新 更多