2013-05-12 15 views
0

Привет всем!Ajax всегда возвращает ошибку

У меня проблемы с плохим вызовом 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, любые идеи о том, как отменить это, когда я его создаю?

EDIT: Функция 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

Что делает 'JSON.stringify (acceptThisFriend)' return и что возвращает '/ Profile/AddFriend'? – karthikr

+0

Какой у вас метод '/ Profile/AddFriend'? можете ли вы добавить его в свой пост? –

+0

Извините за поздний ответ. @karthikr stringify возвращает идентификатор добавляемого друга. AddFriend ничего не возвращает, он недействителен. Это может быть проблема? – Mappan

ответ

0

Изменена функция успеха, чтобы выглядеть следующим образом:

success: function() { $("#AddFriendAncor").replaceWith("<p>Friend added</p>").unbind('click'); }, 

Теперь он срабатывает только один раз. Измененная функция AddFriend гарантировала, что Ajax получил некоторый отклик на нее.