【问题标题】:Access the data through JSON AJAX array -> object通过 JSON AJAX 数组 -> 对象访问数据
【发布时间】:2016-09-23 17:10:08
【问题描述】:

我有这个 json 结果:

  [{
    "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);

    }

【问题讨论】:

  • nhs_hospitals 的内容是什么?
  • 问题是nhs_hospitals对象里面有一个result数组。如果你引用它,你应该得到结果,正如我在下面发布的那样

标签: javascript jquery json ajax api


【解决方案1】:

$('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]之前使用“结果”这个词?
  • 是的,你能引用任何解释这一点的文档吗?
  • 因为这是您的 API 提供的响应格式。如果你去:https://data.gov.uk/data/api/service/health/hospitals/partial_postcode?partial_postcode=EC1A,你会看到响应有一个success标志和一个results数组
  • @Aelliott1485 我拥有(和需要)的所有文档都是可以在此处看到的 API 响应:https://data.gov.uk/data/api/service/health/hospitals/partia‌​l_postcode?partial_p‌​ostcode=EC1A 只要您无权更改 API,您我需要做一个.result。我不确定该网站是否提供了任何文档,这可能会给您带来不同的结果
  • 是的,我查看了 jQuery.parseJSON() 的 jQuery 文档,但它没有提到结果属性...
【解决方案2】:

做一个,

console.log(nhs_hospitals)

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

【讨论】:

  • 是的,我在控制台中得到了 {success: true, result: Array}
  • OK 如果console.log(nhs_hospitals) 打印{success: true, result: Array},那么如果不发布响应,您应该将代码更新为alert(nhs_hospitals.result[0].postcode);
【解决方案3】:

试试看:

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

                        nhs_hospitals = $.parseJSON(data);

                        alert(nhs_hospitals[0].postcode);

                    }

                });

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2019-01-13
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多