通过Postcode API搜索JSON名称

时间:2014-08-04 11:36:06

标签: javascript jquery json

我是jQuery,JSON和API的新手,我正在尝试构建一个小型Web应用程序,当用户键入aa service.type.name和{{1}时,该应用程序会在该区域内调出当地医院}。例如,“N77JN中的疝气修复”。

我有一个小的JSON文件设置,其中包含一些列出其地址和服务的医院对象。

postcode

如果我可以使用此UK Postcodes API来引用我的JSON文件中的地址并根据邮政编码是否匹配或在搜索查询的3英里范围内返回结果,我正在努力解决问题。显然,您可以使用以下代码执行此操作:

{
  "places":[
    {
      "name": "The Whittington Hospital",
      "address": { 
        "street": "Magdala Ave",
        "town": "Islington",
        "city": "London",
        "postcode": "N195NF"
      },
      "service": [{
        "type": [
          { "name": "Hernia Repair" },
          { "name": "Hip Replacement" },
          { "name": "Crohn's Disease" },
          { "name": "Pregnancy" }
        ]
      }]
      }
      ...
  ]
}

我的HTML看起来像这样:

http://uk-postcodes.com/postcode/nearest?postcode=n77jn&miles=3&format=json

我的JS喜欢这样:

<form id="fetch">
    <input type="text" id="query">
    <input type="submit" id="search" value="Go">
</form>

基于对JS的基本理解,我应该可以进行搜索,例如“N77JN中的疝气修复”,它存储在$(function() { var data; $.getJSON('data.json', function(jsondata) { data = jsondata; }); function performSearch(e){ e.preventDefault(); if (data == undefined) return; // do nothing if json is not yet loaded var search = $('#query').val(); var output="<h2>Search results for " + search + "</h2>"; for (var i in data.places) { for (var ind in data.places[i].service[0].type) { if (data.places[i].service[0].type[ind].name == search) { output+="<h3>" + data.places[i].name + "</h3>"; } else {} }; }; document.getElementById("main").innerHTML=output; }; $('#fetch').on('submit', performSearch); }); 变量中,search它位于“{”{ 1}},它将该字符串分成一个数组,给我两个值(“疝气修复”,“N77JN”)。我是在正确的轨道上吗?

我想我可以使用这两个值来查看Postcode API并为该区域的医院提供结果。我只是不确定如何解决这个问题。

任何帮助我指出正确方向的人都会受到赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

var serviceName = search.split(" in ")[0];
var postcode = search.split(" in ")[1];
var matches = $.grep(data, function (e) { 
    return (e.places.address.postcode == element && e.places.service.type.name == serviceName ) });

现在可以根据需要使用matches数组。希望它有所帮助:)

注意:我认为你应该考虑为两个输入使用两个单独的文本框(邮政编码和服务类型),用户可能并不总是在'中键入'并且两边都有空格。