假设我有一个如下的JSON
[{"skill":"java"},{"skill","js"},{"skill","jquery"}]
我需要查找输入的技能是否在JSON中可用
function checkSearchQuery(query){
$.getJSON('assets/static/json/keywords.json',function(data){
$.each(data, function() {
if(query.toLowerCase() == this.skill.toLowerCase()) {
return true;
}
});
});
}
我正在检查这个
if(checkSearchQuery("Java")) {
// Do the action
}
else {
// Do else part
}
但这似乎总是执行else部分。
答案 0 :(得分:1)
由于您在checkSearchQuery()
内进行异步调用,因此将在函数返回之前评估if条件。您需要了解这一点,或者在成功处理程序中完成工作,或者使用done()
之类的东西来使用延迟对象。例如:
$.getJSON('assets/static/json/keywords.json',function(data){
$.each(data, function() {
if(query.toLowerCase() == this.skill.toLowerCase()) {
return true;
}
});
}).done(function(..)) {
// perform some action
});
答案 1 :(得分:0)
$.getJSON
工作异步,你应该发送一个回调函数,
function checkSearchQuery(query, callback){
var result = false;
$.getJSON('assets/static/json/keywords.json',function(data){
$.each(data, function() {
if(query.toLowerCase() == this.skill.toLowerCase()) {
result = true;
}
});
callback(result);
});
}
checkSearchQuery("Java", function(result) {
if (result == true) {
//do the action
} else {
//do else part.
}
});