(Angular JS)如果响应是一个JSON对象数组,如何通过传递参数来过滤$ http.get?

问题描述:

我正在向我的REST API发出$http GET请求以获取项目列表。我想要做的就是使用param选项过滤响应,只将项目分配给特定的人员。

var config = { 
    withCredentials: true, 
    params: { 
    AssigneeId: 12423 
    } 
}; 
$http.get(baseUrl + 'projects', config).then(function successCallback(response) { 
    //do things on success 
}, function errorCallback(response) { 
    //do things on error 
}); 

AssigneeId字段是project对象的属性。我遇到的问题是$http.get的响应是JSON对象的数组,使得param无用。我的回答看起来是这样的:

[{ 
    ProjectName: 'project 1', 
    AssigneeId: 12311, 
    size: 5 
}, { 
    ProjectName: 'project 2', 
    AssigneeId: 15232, 
    size: 4 
}, { 
    ProjectName: 'project 3', 
    AssigneeId: 43123, 
    size: 2 
}, { 
    ProjectName: 'project 4', 
    AssigneeId: 12423, 
    size: 6 
}] 

我想做的事与param是只得到'project 4'为我GET请求的响应。由于响应是一个数组,我认为它不工作?或者我做错了什么?

+0

,服务器必须支持... –

+0

你所要求的API服务器给你的过滤列表,针对这hanpend你必须有一个API路由,它接受的参数类似于/ getProjectsById/{id},并让它为您过滤结果。也请看看这里:https://en.wikipedia.org/wiki/Percent-encoding和在这里:https://stackoverflow.com/questions/21753072/angular-http-request-with-json-param –

由于@Kevin B提到它必须由您的服务器支持。你需要与你的服务人员交谈以解决这个问题或者通过正确的参数。直到你的服务器人解决这个问题。如果你想使用参数对其进行过滤,可以有这个新的代码

var assigneeId = 12423; 
var config = { 
    withCredentials: true 
}; 
$http.get(baseUrl + 'projects', config) 
.then(successCallback(response){ 
    var assignedProject = response.filter(function(o){ 
    return o.AssigneeId === assigneeId; 
    }).map(function(o){ 
    return o.ProjectName; 
    })[0]; 
}, errorCallback(response){ 
    //do things on error 
} 
+0

谢谢。肯定会让服务人员知道。 – Roosh1r

+0

@randominstanceOfLivingThing你刚才复制我的答案。 – 2016-08-24 16:12:33

+0

@ SoftwareEngineer171,当我添加我的答案时,我只注意到过滤功能。我没有看到地图功能。 – randominstanceOfLivingThing

您可以在得到回复时对其进行过滤。

response = response.filter(function(a) { 
    return a.AssigneeId === config.params.AssigneeId; 
}).map(function(a) { 
    return a.ProjectName; 
})[0];