2015-10-18 78 views
0

可以过滤来自不同服务器的API请求吗?比方说,这个端点(https://www.myendpoint/returns.php?callback=)返回这样的对象列表:JSON API回调

[ 
    { 
     "name": "Joshua", 
     "sex": "M", 
     "address": { 
      "postCode": "x", 
      "city": "y" 
     } 
    }, 
    { 
     "name": "Marie", 
     "sex": "F", 
     "address": { 
      "postCode": "x", 
      "city": "y" 
     } 
    }, 
    { 
     "name": "Frank", 
     "sex": "M", 
     "address": { 
      "postCode": "x", 
      "city": "y" 
     } 
    } 
] 

当然这只是和示例,因为API可以返回records.The回调参数的数以百万计发起JSONP通信“?回调= ...“无效或缺少回调将调用400错误请求。

比方说,我想这是只有男性的记录(M)

我在做这样的事情使用jQuery:做请求时

$.ajax({ 
    type: 'GET', 
    url: "https://url-to-api?callback=?", 
    async: false, 
    jsonpCallback: 'jsonCallback', 
    contentType: "application/json", 
    data:{'sex':'M'}, 
    dataType: 'jsonp', 
    success: function(json) { 
     console.dir(json); 
    }, 
    error: function(e) { 
     console.log(e.message); 
    } 
} 

有任何的方式来过滤结果?因为现在,解决方案是获取所有结果并查找对象中的男性属性。

+0

你必须在服务器端进行过滤。 –

+0

发送到客户端之前进行过滤是您的服务器必须为您做的事情。 – jfriend00

+0

问题是我没有在服务器端的任何控制。我唯一知道的就是这个API的URL。因为我有这个URL,所以我知道JSON文件的结构。现在我在做完请求后返回所有对象,并循环所有对象以检查哪个是男性(M) – Nocktu

回答

0

为什么要循环结果?这里用grep解决方案:

$.ajax({ 
    type: 'GET', 
    url: "https://url-to-api?callback=?", 
    async: false, 
    jsonpCallback: 'jsonCallback', 
    contentType: "application/json", 
    data:{'sex':'M'}, 
    dataType: 'jsonp', 
    success: function(json) { 
     var filtered=$.grep(json,function(item,index){ 
     return item.sex!=='M' 
    }); 
    }, 
    error: function(e) { 
     console.log(e.message); 
    } 
} 
+0

尝试解决方案时,出现此错误: 未捕获的SyntaxError:意外的令牌o – Nocktu

+0

@ Ma1990什么是一种返回对象?它是json还是简单的数组?如果这不是JSON,JSON.parse(json)会给你这样的例外 – AlexBerd

+0

这是一个对象数组。 – Nocktu