Javascript拒绝返回任何内容

Javascript拒绝返回任何内容,javascript,return,Javascript,Return,上面的代码应该读取一个JSON文件,比较一些查询字符串以测试其有效性,然后在请求有效时返回对象。问题是,无论我做什么,getGood都拒绝向我的owner变量返回任何值。我试着让它返回周围不同的值。我只是想让它归还我能归还的任何东西。它需要返回cval。但是,底部的警报始终显示“未定义/空” 编辑 因为显然人们认为我就是那么迟钝: 是的,返回语句。是的,qHash==qs('hash'),我不是要你检查每个if/loop/等等。我已经知道所有这些都是有效的。我在问,为什么我的return语句没有

上面的代码应该读取一个JSON文件,比较一些查询字符串以测试其有效性,然后在请求有效时返回对象。问题是,无论我做什么,
getGood
都拒绝向我的
owner
变量返回任何值。我试着让它返回周围不同的值。我只是想让它归还我能归还的任何东西。它需要返回
cval
。但是,底部的警报始终显示“未定义/空”

编辑

因为显然人们认为我就是那么迟钝:

是的,返回语句。是的,qHash==qs('hash'),我不是要你检查每个if/loop/等等。我已经知道所有这些都是有效的。我在问,为什么我的return语句没有将
owner
设置为它应该设置的值。

传递给“$.getJSON()”的回调是异步执行的。因此,不可能从中返回值

相反,传入需要作为函数参数作用于该值的代码。然后回调函数可以将值作为参数传递给该函数

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);
})
JavaScript并不是“拒绝返回”任何东西。你只是没有要求

你在干什么

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);
});

但是
getGood
不会
返回任何值。唯一的
return
语句是
函数(key,val)
中的
getGood
语句,它从该函数返回,而不是从
getGood
返回,您得到了所有这些条件。如果,循环。。。只有在一种情况下返回值。只需调试代码,看看哪里出了问题。我们应该如何从这里猜测呢?我会冒险猜测说
qHash
不等于
qs('hash')
@GolezTrol,检查我的更新。@GaryWilloughby,检查我的更新。对不起,你以为我认为你是弱智。让我向你保证我不认为你是。哇,它工作得很好。我甚至没想到这是个问题!谢谢很高兴它成功了!这是JavaScript中非常常见的模式,不仅仅是因为它是异步的。其他回调函数可能是同步的,但它们仍然不会使主函数返回值。@GolezTroi是的,这是非常正确的-返回值隐藏在两个“$.each()”调用中。啊,这一点也不错!波蒂没有提到这一点,我认为这是另一个问题。幸运的是,波蒂的回答没有因此受到阻碍+1.
var owner=getGood(qs('cat'),qs('subp'));