getGood = function(v,x) {
$.getJSON('json/products.json', function(data) {
$.each(data, function(key, val) {
if (v.toLowerCase() == key.toLowerCase()) {
$.each(val.products, function(ckey, cval) {
if (x.toLowerCase() == ckey.toLowerCase()) {
var dval=new Date().getDay();
var qHash=hex_md5(v+x+qs('cst')+dval).toLowerCase();
if (qHash == qs('hash')) {
return dval;
} else {
window.location.replace('/errors/418.html');
}
}
});
}
});
});
}
$(document).ready(function() {
var owner=getGood(qs('cat'),qs('subp'));
alert(owner==null);
$('.content_title').html(qs('subp'));
$('.description').html(owner.descripion);
})
以上代码应该读取JSON文件,比较一些查询字符串以测试有效性,然后在请求有效时返回对象。问题是,无论我做什么,getGood
都拒绝向我的owner
变量返回任何值。我试过让它返回它周围的不同值。我只是想让它尽可能地回报。它需要返回cval
。但是,底部的警报总是说“undefined / null”。
修改
因为显然人们认为我只是那个迟钝的人:
是,它到达return语句。是的,qHash == qs('hash'),我不是要求你检查每个if / loop / etc。我已经知道所有这些都有用。我问,为什么我的return语句最终没有将owner
设置为它应该是什么。
答案 0 :(得分:6)
传递给“$ .getJSON()”的回调执行异步。因此,无法从中返回值。
相反,将需要对值进行操作的代码作为函数参数传递。然后,回调函数可以将值传递给,作为参数。
function getGood(v, x, handleOwner) {
$.getJSON('json/products.json', function(data) {
$.each(data, function(key, val) {
if (v.toLowerCase() == key.toLowerCase()) {
$.each(val.products, function(ckey, cval) {
if (x.toLowerCase() == ckey.toLowerCase()) {
var dval=new Date().getDay();
var qHash=hex_md5(v+x+qs('cst')+dval).toLowerCase();
if (qHash == qs('hash')) {
handleOwner(dval); // calling the handler function here
} else {
window.location.replace('/errors/418.html');
}
}
});
}
});
});
}
//
getGood(qs('cat'),qs('subp'), function(owner) {
alert(owner);
});
答案 1 :(得分:1)
JavaScript不是“拒绝返回”任何东西。你只是不要问它。
你正在做
var owner=getGood(qs('cat'),qs('subp'));
但getGood
没有return
任何值。唯一return
语句位于function (key, val)
内getGood
内,该getGood
内容从该函数返回,而非{{1}}。