我有一个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语句。 我不知道这里有什么问题。任何的想法??请帮忙..
答案 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成功函数时调用的回调方法来解决的。