【问题标题】:Synchronous XMLHttpRequest deprecated blocking HttpPost ActionResult不推荐使用同步 XMLHttpRequest 阻塞 HttpPost ActionResult
【发布时间】:2015-11-03 02:06:09
【问题描述】:

我最近向一个项目添加了 jquery 引用,现在没有触发来自视图的帖子。 Post ActionResult 保存了用户选择的设置,现在 Post 内部的断点没有被击中。 Visual Studio 中没有错误,但 Chrome 的控制台输出警告“主线程上的同步 XMLHttpRequest 已被弃用,因为它对最终用户的体验产生不利影响。有关更多帮助,请查看 http://xhr.spec.whatwg.org/。”和“为同步请求设置 'XMLHttpRequest.withCredentials' 已弃用。”

代码在 jquery 之前运行,那么问题是否与这些警告、jquery 的其他方面或其他方面有关?建议hereherehere 为异步警告提供了可能的解决方案,但是,例如,将异步添加到布局中的新声明会再次触发帖子吗?在此先感谢大家。

观点:

@using Project.Data
@model Project.Models.PreferencesModel
@{
ViewBag.Title = "Preferences";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="page_bar clearfix">
<div class="row">
    <div class="col-md-8">
        <h1 class="page_title">
            <i class="fa fa-gears"></i> Preferences
        </h1>
    </div>
</div>

<div class="page_content">
<div class="container-fluid">
    <form data-parsley-validate>
        @using (Html.BeginForm("Preferences", "Manage", FormMethod.Post, new { id = "PreferencesForm", autocomplete = "on", data_parsley_validate = "data-parsley-validate" }))
        {
            @Html.AntiForgeryToken()
            @Html.HiddenFor(m => m.PreferenceID)
            @Html.HiddenFor(m => m.PreferenceCreatedBy)
            @Html.HiddenFor(m => m.PreferenceCreatedDate)
        <div class="row">
            <div class="col-lg-12">
                <div class="panel panel-default">
                    <div class="panel-body">
                        <div class="col-md-4">

                                @Html.LabelFor(m => m.PricingPreferenceTypeID, "Pricing Preference Type")
                                @Html.DropDownListFor(m => m.PricingPreferenceTypeID, StaticCache.GetPricingPreferenceTypes(), new { @class = "form-control", data_parsley_required = "true" })
                                @Html.ValidationMessageFor(m => m.PricingPreferenceTypeID)

                        </div>
                        <div class="col-md-4">

                                @Html.LabelFor(m => m.PricingStrategyID, "Pricing Strategy")
                                @Html.DropDownListFor(m => m.PricingStrategyID, StaticCache.GetPricingStrategies(), new { @class = "form-control", data_parsley_required = "true" })
                                @Html.ValidationMessageFor(m => m.PricingStrategyID)

                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-lg-12  text-right">
                <button type="submit" class="btn btn-success btn-large">Save</button>
            </div>
        </div>
 }
 </form>
 </div>
</div>

布局包含这些新声明:

<script src="~/Scripts/jquery-2.1.3.js"></script>
<script src="/Scripts/jquery-ui-1.11.4.js"></script>

最后是之前工作的Controller:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Preferences(PreferencesModel model)
{
    ProjectEntities projectDb = new ProjectEntities();

    projectDb.uspAddPreference(DateTime.Now, model.PricingStrategyID, null, null, model.PricingPreferenceTypeID);

    return RedirectToAction("Preferences");
}

编辑 这段 jquery 被添加到 View 的底部,使一个下拉列表依赖于另一个,但是 HttpPost ActionResult 内部的断点仍然没有命中。这可能是什么原因造成的?

@section Scripts{
<script>
    $(function () {
        var $dropdownInput = $("#PricingStrategyID");
        $("#PricingPreferenceTypeID").change(function () {
            if (this.value != 1) {
                $dropdownInput.hide();
            } else {
                $dropdownInput.show();
            }
        }).change();
    });
</script>
}

第二次编辑

保存按钮包含在原始视图中。

【问题讨论】:

  • ajax 调用在哪里??
  • 可能不相关,但您有嵌套的表单标签(无效的 html 且不受支持)并且您有 2 个对 jquery-ui 的引用(包括一个或另一个)
  • 显示的代码中没有任何内容会生成 ajax 调用
  • 我删除了嵌套的表单标签和对 jquery-ui 的引用之一,但是控制器中 Post 内的断点仍然没有被命中。 “保存”按钮重新加载原始页面,生成同步 XMLHttpRequest 警告,并添加到 url “?_RequestVerificationToken=" 和似乎是由数字、字母和连字符组成的唯一标识符。
  • 什么“保存”按钮?您的视图没有显示按钮,也没有显示您的 ajax 方法(您编辑的代码 sn-p 是 jquery 函数,与 ajax 无关)

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


【解决方案1】:

这个问题的答案似乎是一个躲避检测的嵌套表单标签。删除后,Post 工作正常。

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 2015-05-05
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多