【问题标题】:Send an ajax request only after the page is loaded仅在页面加载后发送 ajax 请求
【发布时间】:2016-04-14 17:02:45
【问题描述】:

我在应用程序的服务器端使用 microsoft asp.net mvc,在客户端使用 jquery。 在我的应用程序中,当加载特定页面时,我需要做一些事情。我需要向服务器端发送请求并做一些事情。因为我在客户端执行此操作,所以每个用户都可以看到我的请求,我想确保发出请求的用户不是请求特定页面的用户。到目前为止,我使用了请求伪造令牌,但在过去的一个月里,我跟踪了我的应用程序面临的异常和错误,我看到所需的防伪造 cookie“myCookieName”不存在。首先是否有人可以告诉我这是我的错误,其次是否有人​​可以提出另一种解决方案。

这是我的html代码:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { id = "myForm" }))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(m=>m.Id)
}

这是我的 java 脚本代码:

(function() {
$(function() {
    var $form = $("#myForm");
    $form.ajaxSubmit({
        success: function () {
            $form.remove();
        },
        error: function() {
            $form.remove();
        }
    });
});
}());

这是我的 MVC 代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult Action(int id)
    {
        //Do stuff
    }

【问题讨论】:

    标签: jquery ajax asp.net-mvc csrf antiforgerytoken


    【解决方案1】:

    您的 ajax 不包含 AntiForgery 令牌

    <script type="text/javascript">
        $('#myForm').submit(function () {
            var $form = $('#myForm');
            var token = $('input[name="__RequestVerificationToken"]', $form).val();
            $.ajax({
                url: $(this).data('url'),
                type: 'POST',
                data: { 
                    __RequestVerificationToken: token, 
                    someValue: 'some value' 
                },
                success: function (result) {
                    alert(result.someValue);
                }
            });
            return false;
        });
    </script>
    

    【讨论】:

    • 不,如果您看到我使用来自链接 malsup.com/jquery/form 的 jquery 库中的 ajaxSubmit,此库会自动将输入从 html 发送到控制器。 tnx 为您解答,但这不是我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多