我正在解析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
}));
});
});
});
}
});
});
答案 0 :(得分:2)
你的第二个循环
$.each(element, function(key, value)
将尝试将each
应用于doc_count_error_upper_bound
和sum_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);
}
});
}
});
以下是工作演示片段:
$("#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;