私はajaxがあまり得意ではありませんが、jqueryプラグインの1つを使用するには、ajaxで少し呼び出す必要があります。問題は、それが常に関数のエラー処理に含まれることであり、その理由はわかりません。Visual Web Developper Expressを使用しているため、JavaScriptのデバッグが機能しません。
jquery関数は次のとおりです。
$('.auto-submit-star').rating({
callback: function (value, link) {
$.ajax({
type: "POST",
url: "/Recipe/Rate",
data: $("#rate").serialize(),
dataType: "text/plain",
success: function (response) {
if (response != 'false') {
alert('Your vote has been saved');
} else {
alert('You already voted for this recipe!');
}
},
error: function (response) {
alert('There is an error');
}
});
}
});
次に、それはコントローラーに入ります。私はこの部分をデバッグしました、そしてそれは働きます、それはデータベースに良い値を保存し、そしてユーザーがすでに投票したかどうかに応じて「false」または「」を返します。
コードは次のとおりです。
[HttpPost]
[Authorize]
public ActionResult Rate(FormCollection form)
{
var rate = Convert.ToInt32(form["Score"]);
var id = Convert.ToInt32(form["IDRecipe"]);
//On valide si l'utilisateur a déja voté
Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
var existingVote = db.StarRatings.Where(a => a.IDRecipe == id).Where(b => b.IDUser == userGuid).FirstOrDefault();
if (existingVote != null)
return Content("false");
StarRating rating = new StarRating();
rating.IDRecipe = id;
rating.IDUser = (Guid)Membership.GetUser().ProviderUserKey;
rating.Score = rate;
var recipe = db.Recipes.Where(a => a.IDRecipe == id).First();
recipe.StarRatings.Add(rating);
db.SaveChanges();
return Content("");
}
なぜ私がいつも「エラーがあります」というメッセージを受け取り、それがajax呼び出しの「成功」部分に入らないのか、誰でも教えてくれますか?コントローラーに何か特別なものを返す必要がありますか?
編集
これは、コメントの1つで私が発見したInternetExplorerデバッガーの応答変数のスクリーンショットです。
ありがとう!