我试图使用ajax调用函数,但它没有响应。
以下是代码:
<p id="myElem" class="alert-danger" style="display:none"></p>
<button title="Remove" data-id="@item.Book.Book_id" class="Remove btn btn-group-sm red" style="float:initial">Remove</button>
<script type="text/javascript">
$('.Remove').click(function () {
var myId = $(this).data('id');
$.ajax({
type: "POST",
url: '@Url.Action("Remove", "ReadingNow")?Book_id=' + myId,
success: function (response) {
$('#myElem').html(response).fadeIn('slow');
$('#myElem').delay(8000).fadeOut('slow');
},
failure: function (response) {
alert("Failure");
}
});
});
</script>
这是函数:
public class ReadingNowController : Controller
{
[HttpGet]
public ActionResult Remove(int? Book_id)
{
if (User.Identity.IsAuthenticated)
{
var x = User.Identity.GetUserId();
var IsExists = db.ReadingNow.Where(t => t.Book_Id == Book_id && t.User_Id == x).FirstOrDefault();
if (IsExists != null)
{
db.ReadingNow.Remove(IsExists);
int state = db.SaveChanges();
if (state == 1)
{
return Content("Book Removed From Your Reading Now List !");
}
}
}
return Content("Error !");
}
}
注意:当我尝试直接调用它时,它可以工作,但是当使用ajax时我没有结果......我怎样才能解决这个问题?
答案 0 :(得分:1)
您也可以通过Controller
通过传递参数来调用Ajax
,如下所示:
<script type="text/javascript">
$('.Remove').click(function () {
$.ajax({
url: '@Url.Action("Remove", "ReadingNow")',
data: { myId: $(this).data('id') /* add other additional parameters */ },
cache: false,
type: "POST",
success: function (response) {
$('#myElem').html(response).fadeIn('slow');
$('#myElem').delay(8000).fadeOut('slow');
},
failure: function (response) {
alert("Failure");
}
});
});
</script>
答案 1 :(得分:0)
确保jQuery正常工作
首先,确保您的jQuery代码正常工作并被引用。您需要包含对库之前的引用,以调用任何与jQuery相关的代码:
<!-- Example Reference -->
<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<script>
$(function(){
// Place your code here
});
</script>
如果您想要执行GET
...
您在ajax()
来电中指定您正在通过POST
属性发出type
请求,但您的控制器操作明确期望GET
通过[HttpGet]
{1}}属性装饰你的行动。
您可以将type
属性从POST
更改为GET
来解决此问题(或者您可以完全删除它,因为GET
是默认值):
type: "GET",
如果您想要执行POST
...
或者,如果您想要实际执行POST
,请保留现有代码并改为使用[HttpPost]
属性:
[HttpPost]
public ActionResult Remove(int? Book_id)
{
// Code omitted for brevity
}
答案 2 :(得分:0)
我的问题在于这一行:
url:'@ Url.Action(“删除”,“ReadingNow”)?Book_id ='+ myId
不要使用@ Url.Action,这不是当前语法在JS中使用razor(你需要使用伪元素),只需写入url [ “/ ReadingNow /删除?Book_id =” + ID]。通过这种方式,您可以确定请求的位置,并且更容易阅读。