2017-08-30 92 views
0

这就是我目前正在做的事情。我试着将我的json中的值推入链接数组中,但输入数组后,值变为undefined。什么是移动数据并使其仍然可用的更好方法?从使用此代码从我的JSON对象添加到我的列表数组中

var links = []; 
$.ajax({ 
    url: 'data.json', 
    dataType: 'json', 
    type: 'get', 
    cache: false, 
    success: function(data) { 
    $(data.emails).each(function(index, value) { 
     links.push(value); 
    }); 
    } 
}); 

//data.json contains: 
{ 
    "emails": [{ 
    "source": "[email protected]", 
    "target": "[email protected]" 
    }] 
} 

结果是相同的。值输入数组,但是当您通过链接访问它们。(值的名称)返回“未定义”

$.each(data.emails, function(index, value) { 
     links.push(value); 
     console.log(links); 
     return value; 
    }); 

Result

+0

里面是什么 “数据”? – Sletheren

+0

真正的问题是你在哪里返回,你在哪里检查'links'数组,为什么该数组有一个'target'属性? – adeneo

+0

你在哪里检查'links'数组?请注意,AJAX请求是异步的。 –

回答

0

尝试这个

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>   
<script type="text/javascript"> 
//alert("data"); 
var links = []; 
    $.ajax({ 
     url: 'test1.php', 
     type: 'post', 
     dataType: 'json', 
     data: { 

     } 
     }).done(function(data) { 
     $.each(data.emails, function(index, value) { 
     links.push(value); 
     console.log(links); 
     return value; 
     }); 
    }); 

    function getVal(){ 
     console.log(links[0].target); 
    } 
</script> 
<button onclick="getVal()">Get target</button> 
+0

主要问题是该调用是异步的,我不知道这一点。 –

0

我觉得你的成功回调代码是错误的,

正确的方式循环data.emails是,

success: function(data) { 
     $.each(data.emails, function(index, value) { // <--- change this 
      links.push(value); 
      console.log(links); //<--- updated 
      return value; 
     }); 
    } 
+0

你是正确的,因为在这种情况下使用$ .each更正确,但是,这不是导致问题的原因。 $()可以从任何类似数组的结构创建一个集合,并且.each将迭代它。 –

0

你的AK调用console.log这不存在。修改您的代码来调用并打印出数组,而不是随机属性。

var links = []; 
    $.ajax({ 
    url: 'data.json', 
    dataType: 'json', 
    type: 'get', 
    cache: false, 
    success: function(data) { 
     $(data.emails).each(function(index, value) { 
      links.push(value); 
      console.log(links); 
      return value; 
     }); 
    } 
});