TypeError:无效' in'解析嵌套JSON时的操作数obj

时间:2015-12-04 04:13:10

标签: jquery

我正在解析this web service的回复,以使用key的值作为自动填充建议。我能够获得感兴趣的值,例如VariantType,但我在控制台中收到错误:

  

TypeError:无效' in'操作数obj"

如何解决?

以下是代码:

$( "#inputParam" ).autocomplete({
      source: function( request, response ) {
        $.ajax({
          // Suggestion API from smartAPI project, example input 'affy' return should display 'ids:affymetrix.id'
          url: "http://smart-api.info/api/suggestion/?field=services.inputParameter.parameterDataType",
          //url: "http://gd.geobytes.com/AutoCompleteCity",
          dataType: "json", //Use jsonp for http://gd.geobytes.com/AutoCompleteCity
          data: {
            q: request.term
          },
          success: function( data ) {
            response( data ); // Works for http://gd.geobytes.com/AutoCompleteCity
            console.log(data)

            // Iterate through JSON object  
            $.each(data, function(index, element) {    //element is 'field_values' from JSON response
              console.log("Loop 1")
              $.each(element, function(key, value) {  //key is 'buckets'
                console.log("Loop 2")
                  $.each(value, function(k, v) {      // v is 'Object { key:"VariantType", doc_count=1}'' 
                    $('body').append($('<div>', {
                        text: v.key
                      }));
                  });
              });
            });
          }
        });
      });

1 个答案:

答案 0 :(得分:2)

你的第二个循环

$.each(element, function(key, value)

将尝试将each应用于doc_count_error_upper_boundsum_other_doc_count属性,这些属性既不是对象也不是数组。

需要使用$.each来获取这些值吗?它遍历整个数组,遍历所有不同类型的对象。您可以像这样直接遍历目标数组:

var arr = data.field_values.buckets; 
// Here, do something with arr

如何自动填充

当您传递自定义对象时,它需要一个字符串数组。您需要将对象转换为键数组。您可以使用Array.prototype.map

$("#inputParam").autocomplete({
    source : function (request, response) {
        $.ajax({
            url : "http://smart-api.info/api/suggestion/?field=services.inputParameter.parameterDataType",
            dataType : "json",
            success : function (data) {
                var dataKeys = data.field_values.buckets.map(function (x) {
                    return x.key;
                });
                response(dataKeys);
            }
        });
    }
});    

以下是工作演示片段:

&#13;
&#13;
$("#inputParam").autocomplete({
  source : function (request, response) {
    $.ajax({
      url : "http://smart-api.info/api/suggestion/?field=services.inputParameter.parameterDataType",
      dataType : "json",
      success : function (data) {
        var dataKeys = data.field_values.buckets.map(function (x) {
          return x.key;
        });
        console.log(dataKeys);
        response(dataKeys);
      }
    });
  }
});
&#13;
<link href="https://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.3/jquery-ui.min.js"></script>

<input type="text" id="inputParam"/>
&#13;
&#13;
&#13;