无法使用ajax调用函数

时间:2016-04-28 18:27:54

标签: javascript jquery asp.net ajax asp.net-mvc

我试图使用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时我没有结果......我怎样才能解决这个问题?

3 个答案:

答案 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]。通过这种方式,您可以确定请求的位置,并且更容易阅读。