0

これを見ている方、こんにちは!

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

error 関数は、success 関数が持つべきものを実際に保持していることに気付くかもしれません。その理由は、そのように機能するからです。ひどいですが、何かを機能させる必要がありました。

また、データベースに 2 つのインスタンスを追加します。これは、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 は何かを取得して成功を返しましたが、Ajax を次のように変更したにもかかわらず、データベースに 2 回追加しました。

$(".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");
        }
    });
});
4

1 に答える 1