Я пытался извлечь некоторые данные из URL JSON.
Я смог сделать это, используя этот код:
function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val));
} else
//if key matches and value matches or if key matches and
value is not passed (eliminating the case where key matches but passed value does not)
if (i == key && obj[i] == val || i == key && val == '') { //
objects.push(obj);
} else if (obj[i] == val && key == ''){
//only add if the object is not already in the array
if (objects.lastIndexOf(obj) == -1){
objects.push(obj);
}
}
}
return objects;
}
..
var xhr = new XMLHttpRequest();
xhr.open("GET", json_url, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// JSON.parse does not evaluate the attacker's scripts.
var resp = JSON.parse(xhr.responseText);
var item = "Entire Item Name";
var name = (getObjects(resp, '', item));
Возвращает массив элемента, но имя элемента должно быть точным, вплоть до столиц.
Я пытался добавить этот искатель ключевых слов fuze.js
http://fusejs.io/
Я попытался добавить его в скрипт следующим образом:
var options = {
shouldSort: true,
//tokenize: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: ['name'],
id: 'name'
};
var fuse = new Fuse(resp, options);
var result = fuse.search("a");
console.log(result);
}
}
xhr.send();
Материал fuze js находится внутри оператора if под именем var.
Вы можете видеть, что я пытался просто поставить простое "а", чтобы увидеть, действительно ли он вернул некоторые данные. и я перепробовал множество вариантов, и пока он не возвращает никаких результатов, что бы я ни пытался.
Есть идеи, почему это не работает?