2013-09-24 71 views
0

我刚开始使用AJAX,尝试使用JQuery的$ .getJSON函数(或任何相关的,即$ .load(),$ .ajax()等)。我有一个结构是这样的一个JSON文件:AJAX从JSON树中获取

[ 
    { 
     "id": 1, 
     "email": "[email protected]", 
     "password": "password" 
    }, 
    { 
     "id": 2, 
     "email": "[email protected]", 
     "password": "password" 
    } 
] 

我怎么能说一个得到这个JSON文件(姑且称之为users.json),用于与特定电子邮件用户?我认为这将是$ .getJSON中的第二个参数,但似乎只是返回整个树。

谢谢!

+0

您需要在javascript中通过客户端上的变量进行解析,或者使其成为动态生成的users.json,并且只为特定用户输出正确的json –

+1

您正在显示用户密码一个JSON请求?你为什么要这样做? – Blazemonger

回答

2

简短的回答 - 你不能直接用AJAX做到这一点。 jQuery可以提取HTML和XML文档的一部分,但不能提取JSON。

最简单的答案 - 检索整个对象(你,反正),并使用jsonpath得到你想要

再回应结构 - 检索整个对象,自己穿越它来得到你想要

对象

最佳答案 - 使电子邮件地址成为任何脚本生成json的参数,并让服务器只返回您想要的数据。

+0

必须同意“最佳答案”,尽管如果OP不控制JSON,那么它不会成为一种选择。 – Blazemonger

+0

目前使用最简单的答案,因为我试图尽可能在JS中做尽可能多的。并尝试jsonpath和JSONselect – russtuck91

1

解析JSON后,将其传递给回调函数 - 然后您可以根据需要操作该数组。

你可能会想一些自定义代码:

$.getJSON(myURL, function(data) { 
    /* data is an array of objects */ 
    for (var i=0, j=data.length; i<j; i++) { 
     if (data[i].email === some_value) { 
      /* do something with data[i] */ 
     }; 
    }; 
}); 

http://api.jquery.com/jQuery.getJSON/

+0

你是什么意思,没有内置的方式?总是有'Array.filter' – Alnitak

+0

@Alnitak呃,显然我不是那个意思....(根据MDN,['Array.filter'](https://developer.mozilla。org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)不适用于IE8及以下版本,因此在这种情况下它不是“永远”可用。)对于IE8, – Blazemonger

+0

始终有垫片(或垃圾桶......) – Alnitak

1

可在1 2的东西,遍历在客户端磁盘阵列,动态地对每个生成users.json调用(假设像PHP后端服务器的语言)

使用动态生成的JSON文件

JS

$.ajax({ 
    url:"/users.json.php", 
    data:{ 
     useremail:"[email protected]" 
    } 
    type:"POST", 
    dataType:"json", 
    success:function(userdata){ 
     //users data will be in userdata 
     console.log(userdata.email); 
    } 
}) 

服务器脚本(假定PHP):通过用户数组循环:users.json.php

$email = $_POST['useremail']; 

//get user data based on email 
... 

echo json_encode($userdata); 
die; 

生成的JSON文件应该结束了outputing像

{"id": 1,"email": "[email protected]","password": "password"} 

环法在客户端

$.ajax({ 
    url:"/users.json", 
    dataType:"json", 
    success:function(data){ 
     for(i=0;i<data.length;i++) { 
     var user = data[i]; 
     if(user.email == "[email protected]") { 
      //do what you need to with user data 
     } 
     } 
    } 
})