欢迎那些观看此内容的人!
我遇到了一个糟糕的Ajax调用问题。 在我的MVC3项目中,我有一个数据库,当用户在他的朋友列表中添加另一个用户时,该数据库会记录一行。
这是html / Razor代码:
@if(!Model.areFriends){
<div id="AddFriendAncor" class="AddButton"><a href="#" id="@Model.theUser.userID" class="Add">Add to friendlist</a></div>
}
else
{
<div class ="AddFriendAncor"><a href="#" id="DoneAdding">You are friends</a></div>
}
这是Javascript / jQuery / Ajax代码。
$(".Add").on("click", function (event) {
event.preventDefault();
var acceptThisFriend = { "ID": event.target.id };
$.ajax({
type: "POST",
url: "/Profile/AddFriend",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(acceptThisFriend),
success: function () { alert("Works");},
error: function ()
{
document.getElementById(acceptThisFriend.ID).innerHTML = "Friend Added";
}
});
});
您可能会注意到错误函数实际上包含了成功函数应具有的内容。 原因是它以这种方式工作。这很可怕,但我必须得到一些工作。
此外,它还向数据库添加了两个实例。这是因为它动态创建了Html,在创建它时如何取消绑定的任何想法?
编辑:AddFriend函数:
AddFriend函数改为:
public virtual ActionResult AddFriend(string ID)
{
System.Diagnostics.Debug.WriteLine(ID);
var friendID = Convert.ToInt32(ID);
var user = u_rep.GetUser(User.Identity.Name);
f_rep.AddFriend(user.userID, friendID);
return Json(true);
}
我将AddFriend更改为上面的内容,现在Ajax获取了一些内容并返回成功,但我仍然向数据库添加两次dispite,将我的Ajax更改为:
$(".Add").on("click", function (event) {
event.preventDefault();
var acceptThisFriend = { "ID": event.target.id };
$.ajax({
type: "POST",
url: "/Profile/AddFriend",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(acceptThisFriend),
success: function () { $("#AddFriendAncor").replaceWith("<p>Vini bætt við</p>"); },
error: function ()
{
alert("fail");
}
});
});
答案 0 :(得分:0)
将成功功能更改为:
success: function () { $("#AddFriendAncor").replaceWith("<p>Friend added</p>").unbind('click'); },
现在只发射一次。 修改后的AddFriend函数确保Ajax得到了一些响应。