得到错误"是否为空对象"

时间:2014-06-30 04:26:10

标签: javascript jquery json

我有以下代码:

<!doctype html>
<html lang="en">
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta charset="UTF-8">
  <title>Document</title>
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
</head>
<body>
  <table class="table" id="table_id">
    <thead>
      <th data-dynatable-column="pt_name">Name</th>
      <th data-dynatable-column="unit">Unit</th>
      <th data-dynatable-column="room">Room</th>
      <th data-dynatable-column="fin">FIN</th>
      <th data-dynatable-column="line_type">Line Type</th>
      <th data-dynatable-column="line_loc">Location</th>
      <th data-dynatable-column="line_days">Est Days in Place</th>
      <th data-dynatable-column="insert_date">Insertion Date</th>
      <th data-dynatable-column="last_dsg_change">Last Dsg Change</th>
      <th data-dynatable-column="hosp_insertion">Hospital Insert</th>
      <th data-dynatable-column="reason">Reason</th>
      </thead>
      <tbody></tbody>
  </table>

  <script src="//cdnjs.cloudflare.com/ajax/libs/json2/20130526/json2.min.js"></script>
  <script type="text/javascript" charset="utf8" src="js/jquery-1.11.1.min.js"></script>
  <script src="libs/jquery-dynatable/jquery.dynatable.js"></script>
  <script>
    $(function(){

        $.get("model/20_mp_cc_get_cvcs.json",function (data) {

          $('#table_id').dynatable({
            dataset: {
              records: data.cvc_list.qual
            }
          });
        })

    });
  </script>
</body>
</html>

和20_mp_cc_get_cvcs.json的一部分是:

{
    "cvc_list": {
        "cvc_cnt": 12,
        "patient_cnt": 6,
        "qual": [
            {
                "dg_id": 20627424964.0,
                "enc_id": 82048822.0,
                "fin": "700001703",
                "hosp_insertion": "y",
                "insert_date": "05/29/2014",
                "insert_dt_tm": "/date(2014-05-29t00:00:00.000-04:00)/",
                "last_dsg_change": "",
                "line_days": 31,
                "line_loc": "upper",
                "line_type": "cvc",
                "pers_id": 69935620.0,
                "pt_name": "buildtest , domainone",
                "reason": "",
                "room": "1rmh",
                "unit": "1rmh"
            },
            {
                "dg_id": 20627428586.0,
                "enc_id": 82048822.0,
                "fin": "700001703",
                "hosp_insertion": "n",
                "insert_date": "05/21/2014",
                "insert_dt_tm": "/date(2014-05-21t00:00:00.000-04:00)/",
                "last_dsg_change": "",
                "line_days": 39,
                "line_loc": "rt., brachial",
                "line_type": "picc",
                "pers_id": 69935620.0,
                "pt_name": "buildtest , domainone",
                "reason": "",
                "room": "1rmh",
                "unit": "1rmh"
            }
        ]
    }
}

我一直收到一条错误,说cvc_list.qual是&#34; null或不是对象&#34;。并非所有浏览器都会发生这种情况。就在我们的Citrix VM中运行带有文档模式IE7的IE10。我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

$.get可能无法保证JSON解析,最好使用完整版本 -

$(function(){
    $.ajax({
         url: "model/20_mp_cc_get_cvcs.json",
         dataType: "json",
         type: "get",
         success: function(data){
             $('#table_id').dynatable({
                  dataset: {
                        records: data.cvc_list.qual
                  }
             });
         }
    });


});

IE7中还提供了JSON.parse方法,因此您也可以使用该方法进行解析。所以你可能会做这样的事情 -

    $.get("model/20_mp_cc_get_cvcs.json",function (data) {
      if (typeof data == "string"){
          data = JSON.parse(data);
      }
      $('#table_id').dynatable({
        dataset: {
          records: data.cvc_list.qual
        }
      });
    })

答案 1 :(得分:0)

在ajax调用中使用dataType属性。 根据jQuery文档,默认情况下,它的值是基于guess评估的;

  

dataType(默认值:Intelligent Guess(xml,json,script或html))

     

类型:字符串您期望从中返回的数据类型   服务器。如果没有指定,jQuery将尝试根据它推断它   响应的MIME类型(XML MIME类型将产生XML,在1.4中   JSON将产生一个JavaScript对象,在1.4脚本中将执行   脚本,其他任何东西都将作为字符串返回。)

如果您希望从服务器端获取json,请在ajax调用中指定dataType:json。

或者您也可以使用jQuery.parseJson

<强>溶胶#1

$。get(&#34; model / 20_mp_cc_get_cvcs.json&#34;,function(data){

      $('#table_id').dynatable({
        dataset: {
          records: data.cvc_list.qual
        }
      });
    }, "json");  // Tell jQuery that you are expecting json.

<强>溶胶#2

$.get("model/20_mp_cc_get_cvcs.json", function (data) {
          var json = jQuery.parseJSON(data);  // parse it 
          $('#table_id').dynatable({
            dataset: {
              records: json.cvc_list.qual   // use the json here
            }
          });
        });