jQuery MVC - Базовая инструкция jQuery if else, какая CANT работает? - PullRequest
0 голосов
/ 01 октября 2011

Я получил сценарий if-else:

     $('#favitem').live('click', function () {
        var fid = $(this).parent().attr('id');

        if (isFav(fid)) {
            alert("Do you want to remove from favorite?");
        }
        else {
            alert("Add to favorite?");
        }
    });

, вызывающий функцию сценария isFav:

    function isFav(fid) {

    $.ajax({

        url: '/Stock/IsFav',
        type: 'GET',
        data: { id: fid },
        success: function (result) { return result; }
    });
}

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

    public Boolean IsFav(int id)
    {
        var food = dbEntities.FOODs.Single(f => f.FoodID == id);
        if (food.FavFlag == 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

Кажется, все работает нормально, я получаю правду от firebug, НО я получаю предупреждающее сообщение из оператора else.Оператор if просто никогда не вводится.Я не могу понять, что здесь не так.Любая идея??Пожалуйста, помогите ..

Ответы [ 2 ]

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

Ajax-запрос в isFav является асинхронным, и метод isFav будет возвращен до его завершения.

Вероятно, я так и решу:

function isFav(fid, callback) {
    $.ajax({
        url: '/Stock/IsFav',
        type: 'GET',
        data: { id: fid },
        success: function (result) { callback(result); }
    });
}


 $('#favitem').live('click', function () {
    var fid = $(this).parent().attr('id');

    isFav(fid,function(result){
        if(result && result.toLowerCase() == "true"){
            alert("Do you want to remove from favorite?"); 
        } else {
            alert("Add to favorite?");  
        }
    });
});

Вы хотите убедиться, чточто код в блоке if выполняется после выполнения запроса ajax.В этом фрагменте это решается методом обратного вызова, который вызывается при выполнении функции успеха ajax.

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

Вы на самом деле не возвращаете true изнутри функции isFav.Кроме того, ajax является асинхронным, поэтому ваш код (оператор if) фактически продолжает выполняться до завершения ajax, поэтому в момент выполнения результат isFav не определен.Так вот почему еще выполняется.

Вам понадобится немного ремоделирования.

function isFav(fid) {

    $.ajax({

        url: '/Stock/IsFav',
        type: 'GET',
        data: { id: fid },
        success: function (result) {
          if(result == 'favorite') alert("Do you want to remove from favorite?");
          else alert("Add to favorite?");
        }
    });
}

 $('#favitem').live('click', function () {
    var fid = $(this).parent().attr('id');
    isFav(fid);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...