开发者

jQuery MVC - Basic jQuery if else statement which CANT work?

开发者 https://www.devze.com 2023-04-09 13:39 出处:网络
I got an if-else script: $(\'#favitem\').live(\'click\', function () { var fid = $(this).parent().attr(\'id\');

I got an if-else script:

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

        if (isFav(fid)) {
            alert("Do you want开发者_JAVA技巧 to remove from favorite?");
        }
        else {
            alert("Add to favorite?");
        }
    });

calling the isFav script function:

    function isFav(fid) {

    $.ajax({

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

which in turn calling my controller action:

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

Everything seems works fine, I get a true from firebug, BUT i get the alert message from the else statement. The if statement just never being entered. I cant get what is wrong here. Any idea?? Please help..


The ajax request in isFav is async and the isFav method will return before it is completed.

This is probably how I would solve it:

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

You want to make sure that the code in the if-block is run after the ajax request is done. In this snippet this is solved by the callback method that is called when the ajax success function is executed.


You're not really returning true from within isFav function. Also ajax is asynchornous, so your code (if statement) actually continues to execute until ajax finishes, so at the moment of execution the result of isFav is undefined. So that's why else is being executed.

You're gonna need some remodeling.

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

精彩评论

暂无评论...
验证码 换一张
取 消