如何使用 Ajax 在循环中单独发送记录

Posted

技术标签:

【中文标题】如何使用 Ajax 在循环中单独发送记录【英文标题】:how to Send records within the loop individually with Ajax 【发布时间】:2021-12-07 06:07:13 【问题描述】:

我想用 Ajax 将循环内的记录一一发送和保存。每条记录都有一个发送信息的按钮。 但是当我想将记录发送到action方法时,只发送第一条记录的信息。 我还想设置一个条件,如果用户从下拉列表中选择一个项目,则可以发送记录,否则将显示一条消息。

@model ModiranVira.ViewModels.GhrardadViewModel
@using ModiranVira.PublicClass
@
    Layout = null;
    string numSpace = "#,##0.###";


<div class="container-fluid mt-5">

    <table class="table table-bordered table-striped text-sm">



        <thead class="text-center">

            <tr style="background-color:#416992; color: white">
                <th>نوع قرارداد</th>
                <th>مبلغ</th>
                <th>تاریخ شروع</th>
                <th>تاریخ پایان</th>
                <th>تعین کارشناس</th>
                <th>عملیات</th>

            </tr>

        </thead>


        @foreach (var item in Model.ghrardads)
        
            <tr>

                @switch (@item.NoeaKhadmat)
                
                    case 1:
                        <td>حسابرسی</td>


                        break;

                    case 2:
                        <td>مالیاتی</td>

                        break;

                    case 3:

                        <td>منابع انسانی</td>
                        break;

                

                <td>@item.MablghGhrardad</td>

                <td>
                    @item.ShoroeeProjectDate
                </td>

                <td>
                    @item.PayanProjectDate
                </td>

                <input class="d-none" value="@item.id" id="GhradadID" />

                <td>

                    <select class="form-control" id="TaeenKarShnas" required autocomplete="off">
                        <option value="" default="" selected="">انتخاب کنید</option>
                        @foreach (var item1 in Model.Users)
                        
                            <option value="@item1.Id">@item1.FirstName @item1.Family</option>

                        
                    </select>

                </td>

                <td class="text-center">

                    <button id="btnstap39" type="button" class="btn btn-sm btn-outline-success"> <i class="fa fa-save"> </i>ذخیره </button>

                </td>

            </tr>

        

    </table>

 <div id="ohsnap" class="col-md-4 col-xs-12 alert d-none" style="text-align:center;"></div>

</div>


<script>
        $("#btnstap39").on('click', function () 

        $.ajax(
            type: "Post",
            url: '@Url.Action("SubmitGhrardadStap39", "Project")',
            data: 

                'GhradadID': $("#GhradadID").val(),
                'TaeenKarShnas': $("#TaeenKarShnas").val(),

            
        ).done(function (res) 
            if (res.status == 'ok') 

            $("#ohsnap").removeClass('hidden').removeClass('alert-danger').addClass('alert-success').html('گام دوم با موفقیت ثبت شد');
        setTimeout(function () 
            $('#ohsnap').fadeOut('fast');
        , 2000)
        
        );

        );

</script>

[HttpPost]
public IActionResult SubmitGhrardadStap39(int GhradadID, String TaeenKarShnas)

    var ghrar = _context.Ghrardad.Find(GhradadID);

    ghrar.UserID = TaeenKarShnas;

    _context.SaveChanges();

    return Json(new  status = "ok" );


【问题讨论】:

【参考方案1】:

根据您的描述,您无法发送第二个数据的原因是您使用jquery ID选择器选择了ID。但是您的所有表 GhradadID 和 TaeenKarShnas 都是相同的 ID,因此您将始终获得相同的(第一)行。为了解决这个问题,我建议您可以将项目 ID 放在输入中并选择 ID,然后单击按钮会找到每个不同的 ID。

我还想做一个条件,如果用户从下拉列表中选择一个项目,可以发送记录,否则将显示一条消息。

我建议您可以尝试在 ajax 之前创建一个条件,如果值为 null 则更改一些内容。

更多细节,您可以参考以下代码:

<div class="container-fluid mt-5">

    <table class="table table-bordered table-striped text-sm">



        <thead class="text-center">

            <tr style="background-color:#416992; color: white">
                <th>نوع قرارداد</th>
                <th>مبلغ</th>
                <th>تاریخ شروع</th>
                <th>تاریخ پایان</th>
                <th>تعین کارشناس</th>
                <th>عملیات</th>

            </tr>

        </thead>


        @foreach (var item in Model.ghrardads)
        
            <tr>

                @switch (@item.NoeaKhadmat)
                
                    case 1:
                        <td>حسابرسی</td>


                        break;

                    case 2:
                        <td>مالیاتی</td>

                        break;

                    case 3:

                        <td>منابع انسانی</td>
                        break;

                

                <td>@item.MablghGhrardad</td>

                <td>
                    @item.ShoroeeProjectDate
                </td>

                <td>
                    @item.PayanProjectDate
                </td>

                <input class="d-none" value="@item.id" id="@string.Format("GhradadID0",item.id)" />

                <td>

                    <select class="form-control" id="@string.Format("TaeenKarShnas0",item.id)" required autocomplete="off">
                        <option value="" default="" selected="">انتخاب کنید</option>
                        @foreach (var item1 in Model.Users)
                        
                            <option value="@item1.Id">@item1.FirstName @item1.Family</option>

                        
                    </select>

                </td>

                <td class="text-center">

                    <button id="@item.id" type="button" class="btn btn-sm btn-outline-success ClicktPost"> <i class="fa fa-save"> </i>ذخیره </button>

                </td>

            </tr>

        

    </table>



</div>

@section Scripts 

    <script>
        $(".ClicktPost").on('click', function (event) 
            var id = event.target.id;
          
            //Get the value according to Button's ID
            var GhradadID = $("#GhradadID" + id).val();
            var TaeenKarShnas = $("#TaeenKarShnas" + id).val();

            //If the TaeenKarShnas is null alert something
            if (TaeenKarShnas == '') 
                alert("please select dropdownlistvalue");
             else 
                $.ajax(
            type: "Post",
            url: '@Url.Action("SubmitGhrardadStap39", "Home")',
            data: 

                'GhradadID': GhradadID,
                'TaeenKarShnas': TaeenKarShnas,

            
        ).done(function (res) 
            if (res.status == 'ok') 

                $("#ohsnap").removeClass('hidden').removeClass('alert-danger').addClass('alert-success').html('گام دوم با موفقیت ثبت شد');
            
        );

        
        );


    </script>


结果:

如果不选择值,可以参考下图

如果你不选择值,你可以参考下图

【讨论】:

但是我隐藏了一个警报,当条件 res.status == 'ok' 正确时,此警报会在 2 秒后显示并消失,但仍仅适用于第一行.并且在发送第二条记录行信息时不会显示此警报。 我编辑了这个问题。请查看代码和帮助。谢谢 请指导我

以上是关于如何使用 Ajax 在循环中单独发送记录的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ajax将从jquery for循环创建的输入值发送到php [重复]

PHP 和 AJAX:如何在 PHP while 循环中显示 json_encode 数据?

如何使用 AJAX 将 JSON 数据发送到 ASP 服务器?

Discord.js - 如何在文本频道中发送垃圾邮件?

从循环中一次发送一个 AJAX 请求

如何在循环中使用 curl PHP 100 次? [关闭]