【问题标题】:AJAX Success/Error functions are not workingAJAX 成功/错误功能不起作用
【发布时间】:2021-12-17 11:33:38
【问题描述】:

我有调用 AJAX 的按钮

 <form asp-action="EditItem">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
     ..............
                   <!--<input type="text" class="text-danger float-right" style="border:none;font-size: smaller" id="@("errorMessage")"" readonly /> -->
            <div class="form-group">
            <label asp-for="OrderQuantity" class="control-label"></label>
            <input asp-for="OrderQuantity" id="txt" class="form-control" />
            <span asp-validation-for="OrderQuantity" class="text-danger"></span>
        </div>
        <input type="hidden" id="orderId" name="orderId" value="@Model.OrderId" />
        <input type="hidden" id="inventoryorderId" name="inventoryorderId" value="@Model.InventoryOrderId" />
        <input type="hidden" id="inventoryId" name="inventoryId" value="@Model.InventoryId" />
        <button id="button">Update</button>
    </form>
   </div>
 </div>

@section Scripts {
<script type="text/javascript">
    $("#button").click(function () {
        var orderedQuantity = $("#txt").val();
        var orderId = $("#orderId").val();
        var inventoryorderId = $("#inventoryorderId").val();
        var inventoryId = $("#inventoryId").val();
        var data = {
            orderId: orderId,
            inventoryorderId: inventoryorderId,
            inventoryId: inventoryId,
            orderedQuantity: orderedQuantity,
        };

        $.ajax({
            type: 'POST',
            url: '@Url.Action("EditItem", "Orders")',
            data: data,
            dataType: "json",
            success: function (result) {
                alert(result);
                var url = '@Url.Action("Index", "Orders")';
                window.location.href = url + "?custEmail=xyz@rrr.org";               
            },
            error: function (error) {
                alert(error);
            }
        });
    });
</script>
}

我可以看到所有参数都传递给控制器​​动作,并且在控制器中没有看到任何问题

 public async Task<JsonResult> EditItem(int? orderId, int? inventoryorderId, int? inventoryId, int? orderedQuantity)
    {
        var inventoryOrder = await _context.InventoryOrders
            .FirstOrDefaultAsync(io => io.InventoryOrderId == inventoryorderId);
        int curentOrdQuantity = inventoryOrder.OrderQuantity;

        var intData = await _context.Inventories.FindAsync(inventoryId);
        int availQty = intData.QuantityAvailable;
        if ((int)orderedQuantity > curentOrdQuantity)
        {
            if (availQty < ((int)orderedQuantity - curentOrdQuantity))
            {
                inventoryOrder.OrderQuantity = curentOrdQuantity;
                _context.Update(inventoryOrder);
                await _context.SaveChangesAsync();
                return Json(new { status = "NotAvailable", available = intData.QuantityAvailable });
            }
            else
            {
                //Updating the Order
                inventoryOrder.OrderQuantity = (int)orderedQuantity;
                _context.Update(inventoryOrder);
                await _context.SaveChangesAsync();

                //Updating Inventory
                intData.QuantityAvailable = intData.QuantityAvailable - ((int)orderedQuantity - curentOrdQuantity);
                _context.Update(intData);
                await _context.SaveChangesAsync();
                return Json("");
            }
        }           
        return Json("");
    }

我没有在控制器中看到任何错误(控制器中的所有更新都在没有任何问题的情况下发生),但是没有执行成功/错误函数。我没有看到任何 alert() 触发成功或错误。我试图从 JsonResult 更改为 ActionResult,即使那不起作用。谁能说我在这里缺少什么。

public class Order
{
    public int CustomerNumber { get; set; }
    public int CustomerId { get; set; }
    public int OrderId  { get; set; }
    public int InventoryId { get; set; }
    public int InventoryOrderId { get; set; }
    public string StrainId { get; set; }
    public string StrainName { get; set; }
    public string StrainCode { get; set; }
    public string Age { get; set; }
    public string Sex { get; set; }
    public string Genotype { get; set; }
    public int QuantityAvailable { get; set; }
    public int OrderQuantity { get; set; }
    public string RoomNumber { get; set; }

}

【问题讨论】:

  • 由于您的Json("") 为空,因此您不应收到任何警报。
  • 但是success() 中的var url = '@Url.Action("Index", "Orders")'; window.location.href = url + "?custEmail=xyz@rrr.org"; 没有发生
  • 另外,您能否也分享一下您的@ModelEditItem 控制器操作,以便重现它。
  • EditItem 我已经在上面发布的控制器操作/方法。还添加了我的模型类
  • 好的,试试解决方案,希望能解决您的问题

标签: c# jquery ajax asp.net-mvc asp.net-core


【解决方案1】:

当您返回时返回Json("");,这样您就可以摆脱success: function (result) 并替换为success: function ()。现在它将触发 alert 并且您的 URL redirection 将起作用。

 $.ajax({
            type: 'POST',
            url: '@Url.Action("EditItem", "Orders")',
            data: data,
            dataType: "json",
            success: function () {
                alert("Updated Called");
                var url = '@Url.Action("Index", "Orders")';
                window.location.href = url + "?custEmail=xyz@rrr.org";
            },
            error: function (error) {
                alert(error);
            }
        });

输出:

注意: 但是,如果您想继续检查结果,则可以按照以下方式进行操作:

    $.ajax({
        type: 'POST',
        url: '@Url.Action("EditItem", "UserLog")',
        data: data,
        dataType: "json",
        success: function (result) {
            console.log(result);

            if (result.status === "NotAvailable") {
                alert("NotAvailable");
            }
            else {
                  var url = '@Url.Action("Index", "Orders")';
                window.location.href = url + "?custEmail=xyz@rrr.org";
            }

        },
        error: function (error) {
            alert(error);
        }
    });

输出:

【讨论】:

  • 非常感谢。但是,如果我要返回像 return Json(new { status = "NotAvailable", available = intData.QuantityAvailable }); 这样的自定义 JSON,我需要在表单上使用此响应来显示验证错误。如何访问返回的 JSON
  • 是的,现在检查了更新,您可以根据需要在成功函数中设置逻辑。希望它会有所帮助。
  • 我遇到了另一个问题,我可以在这里问还是应该创建一个单独的问题
  • @MdFaridUddinKiron 我已经创建了问题stackoverflow.com/questions/69819791/… 我是第一次 Web 应用程序开发人员,抱歉,如果我问直率的问题.. 再次感谢
  • 已经回答了你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多