Javascript отказывается что-либо возвращать - PullRequest
0 голосов
/ 01 октября 2011
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.Предупреждение в нижней части, однако, всегда говорит "неопределенное / нулевое".

РЕДАКТИРОВАТЬ

Поскольку, очевидно, люди думают, что я просто отсталый:

ДА, доходит до оператора return.Да, qHash == qs ('hash'), я не прошу вас проверять каждый цикл if / loop / etc.Я уже знаю, все это работает.Я спрашиваю, почему мое возвращаемое утверждение не в конечном итоге устанавливает owner на то, что должно.

Ответы [ 2 ]

6 голосов
/ 01 октября 2011

Обратный вызов, переданный "$ .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 голос
/ 01 октября 2011

JavaScript не «отказывается возвращать» ничего.Вы просто не просите об этом.

Вы делаете

var owner=getGood(qs('cat'),qs('subp'));

, но getGood не имеет return никакого значения.Единственный оператор return находится в function (key, val) внутри getGood, который возвращается из этой функции, а не из getGood.

...