2016-09-23 55 views
0

我有这样的JSON结果:访问通过JSON AJAX数组中的数据 - >对象

[{ 
    "website": "http://www.rlbuht.nhs.uk", 
    "sub_type": "Hospital", 
    "sector": "NHS Sector", 
    "postcode": "L3 5PS", 
    "phone": "0151 706 2000", 
    "partial_postcode": "L3", 
    "parent_o_d_s_code": "RQ6", 
    "parent_name": "Royal Liverpool and Broadgreen University Hospitals NHS Trust", 
    "organisation_type": "Hospital", 
    "organisation_status": "Visible", 
    "organisation_name": "Royal Liverpool University Dental Hospital", 
    "organisation_id": "41513", 
    "organisation_code": "RQ614", 
    "longitude": "-2.9669923782348633", 
    "latitude": "53.408927917480469", 
    "is_pims_managed": "True", 
    "fax": "0151 706 5806", 
    "email": "", 
    "county": "Merseyside", 
    "city": "Liverpool", 
    "address3": "", 
    "address2": "", 
    "address1": "Pembroke Place" 
}] 

这里是我的代码访问的URL,并得到其正常工作的JSON:

$("#search_hospitals").on('click', function(p_oEvent_search_hospitals) { 

    var api_search_hospitals, postcode, nhs_hospitals; 
    p_oEvent_search_hospitals.preventDefault(); 
    postcode = $('#input_nhs_h').val(); 
    api_search_hospitals = 'https://data.gov.uk/data/api/service/health/hospitals/partial_postcode?partial_postcode=' + postcode; 

    $.ajax(api_search_hospitals, { 

     complete: function(p_OXHR, p_sStatus) { 

      nhs_hospitals = $.parseJSON(p_OXHR.responseText); 

      alert(nhs_hospitals[0].postcode); 

     } 

    }); 
}); 

我只是用alert(nhs_hospitals[0].postcode);进行测试,看看我能否得到这些数据,但我总是得到TypeError: undefined is not an object (evaluating 'nhs_hospitals[0].postcode') ...

有人可以帮我说出我做错了什么,为什么我得到“未定义”?谢谢

为了方便我做:

complete: function(p_OXHR, p_sStatus) { 

     nhs_hospitals = $.parseJSON(p_OXHR.responseText); 
     hospital = nhs_hospitals.result[0]; 

     alert(hospital.postcode); 

    } 
+0

nhs_hospitals的内容是什么? –

+0

问题在于'nhs_hospitals'对象里面有'result'数组。如果你引用它,你应该得到结果,因为我已经发布在 – nikjohn

回答

2

$('button').on('click', function(p_oEvent_search_hospitals) { 
 

 
    var api_search_hospitals, postcode, nhs_hospitals; 
 
    p_oEvent_search_hospitals.preventDefault(); 
 
    postcode = 'EC1A' 
 
    api_search_hospitals = 'https://data.gov.uk/data/api/service/health/hospitals/partial_postcode?partial_postcode=' + postcode; 
 

 
    $.ajax(api_search_hospitals, { 
 

 
     complete: function(p_OXHR, p_sStatus) { 
 

 
      nhs_hospitals = $.parseJSON(p_OXHR.responseText); 
 
      console.log(nhs_hospitals); 
 
      alert(nhs_hospitals.result[0].postcode); 
 

 
     } 
 

 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button>search</button>

这应该工作。问题在于nhs_hospitals对象内部有一个result数组。如果你引用它,你会得到你的结果。

+0

是的完美的作品 –

+0

我为什么要使用“结果“在[0]之前的单词? –

+0

是的,你可以引用任何文件解释这个? –

1

做一个,

console.log(nhs_hospitals) 

,看看它是否打印数组,如果没有则意味着p_OXHR.responseText不包含任何东西。你确定responseText是从服务器发送的内容吗?

+0

以下,我在控制台中获得了{success:true,result:Array} –

+0

如果'console.log(nhs_hospitals)'打印出'{success:如此,结果是:数组}'那么你应该更新代码,以 '警报(nhs_hospitals.result [0] .postcode);' 如果不发布响应 – Picko

0

试试:

$.ajax(api_search_hospitals, { 
        success: function (data) { 

         nhs_hospitals = $.parseJSON(data); 

         alert(nhs_hospitals[0].postcode); 

        } 

       });