简体   繁体   English

ajax调用结束后如何从ajax调用访问数据

[英]How to access data from ajax call after the ajax call ends

I am making a ajax calls that returns me some data from the server. 我正在进行ajax调用,该调用从服务器返回了一些数据。 I work on string function on the data that come from ajax call. 我处理来自ajax调用的数据的字符串函数。 From my knowledge i can see the string operation begins before the ajax call gets over. 据我所知,我看到字符串操作在ajax调用结束之前就开始了。 Often giving me undefined error. 经常给我未定义的错误。 Here is my ajax call 这是我的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);
        }
    });

Here is my insertDirector function 这是我的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;
              }
         });
        }
       }

Here when i work on substr() it throws the error Cannot read property 'val' of undefined . 在这里,当我处理substr() ,抛出错误Cannot read property 'val' of undefined I can see this is because the substr() is executed before the ajax request is completed. 我可以看到这是因为substr()是在ajax请求完成之前执行的。 how do i fix this ? 我该如何解决 ?

EDITED EDITED

Here is the response 这是回应

{"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}}

Its not clear why you use the $.each here (you can omit it and use data.director instead of value ), but if it is possible that your data contain several 'director' objects and you want to iterate through all of them, then you should change the insertDirector code to skip the 'msg' key as it doesn't have dir_name, dir_plan, ... properties: 目前尚不清楚为什么在这里使用$.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;
        //}
      }
    });
  }
}

also, note that dir_name.val().length is wrong as dir_name is a string ( .val() is not required) 另外,请注意dir_name.val().length是错误的,因为.val()是字符串( .val()

change 更改

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

to

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

try this way : 尝试这种方式:

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;
        }

    }
}

After seeing the data you posted, it is easy to find issue. 查看您发布的数据后,很容易发现问题。 Here, the issue is: 在这里,问题是:

Your function: 您的功能:

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;
              }
         });
        }
       }

Here, when you do $.each, every object inside data will be traversed. 在这里,当您执行$ .each时,将遍历数据中的每个对象。 Now, your first value inside data is msg:1. 现在,您在数据中的第一个值是msg:1。 This is not a object . 这不是一个对象 As a result, on first iteration, key is 'msg' but value is '1' . 结果,在第一次迭代中, 键为'msg',但值为'1' Now this value can't have dir_name so undefined is returned . 现在,该值不能具有dir_name,因此返回undefined As a result dir_name.val() generates error. 结果是dir_name.val()生成错误。

Try it like this: 像这样尝试:

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;
              }
            }

         });
        }
       }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM