jQuery MVC - 基本的jQuery if if语句哪个CANT有效?

时间:2011-10-01 07:37:44

标签: javascript jquery model-view-controller

我有一个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;
        }
    }

一切似乎都很好,我从萤火虫中得到一个真实的,但是我从else语句中得到了警告信息。永远不会输入if语句。 我不知道这里有什么问题。任何的想法??请帮忙..

2 个答案:

答案 0 :(得分:1)

你并没有真正从isFav函数中返回true。此外,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);
});

答案 1 :(得分:1)

isFav中的ajax请求是异步的,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?");  
        }
    });
});

您希望确保在ajax请求完成后运行if块中的代码。在这个片段中,这是通过在执行ajax成功函数时调用的回调方法来解决的。