【问题标题】:POST Request Not sent on button pressPOST 请求未在按钮按下时发送
【发布时间】:2018-04-27 18:37:15
【问题描述】:

您好,我有以下模板,我想发送一个 POST 请求来激活 ajax 以保存多个复选框的选择。当我查看控制台时,它会在用户按下按钮时显示 GET 请求,这是为什么呢?

   <form action="">
    <div class = "container">

      <div class="jumbotron">
        <div class="container">
          <h1 class="jumbotron-heading">Available Application List</h1></br>
        </div>
            <div class="container">

              <div class="row">
                  <div class="col">
                    <h3>Financial</h3>

                            <ul>
                            {% for app in fingrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                  </div>
                  <div class="col">

                    <h3>Care Assure</h3>
                    <div class = "row">

                            <ul>
                            {% for app in cagrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                    </div>

                  <div class = "row">
                    <h3>Performance Improvement</h3>

                            <ul>
                            {% for app in pigrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                  </div>

                  <div class = "row">
                    <h3>Supply Chain</h3>

                            <ul>
                            {% for app in scgrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                  </div>

                  <div class = "row">
                    <h3>DSS Monitoring</h3>

                            <ul>
                            {% for app in dssgrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                  </div>

                  <div class = "row">
                    <h3>Other DSS Applications</h3>

                            <ul>
                            {% for app in othgrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                  </div>

                </div>
                  <div class="col">
                    <div class="row">

                    <h3>Behavior Health / Rehab</h3>

                            <ul>
                            {% for app in bhgrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                    </div>
                    <div class="row">
                    <h3>Clinical Excellence</h3>
                            <ul>
                            {% for app in cegrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                    </div>
                    <div class="row">
                    <h3>Perfomance Service Group</h3>

                            <ul>
                            {% for app in psggrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                    </div>
                    <div class="row">
                    <h3>All Applications</h3>

                            <ul>
                            {% for app in allgrouplist %}
                            <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                            {% endfor %}
                            </ul>

                    </div>
                  </div>


              </div class="row">

                </br></br>
                <a href="{% url 'requestaccess' %}" />
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                <script>
                $(document).ready(function(){
                    var selected_items = [];
                    $(".checkbox").click(function(){
                        var selected_item = $(this).val();
                        var index = selected_items.indexOf(selected_item);
                        if(index == -1)
                        {
                           selected_items.push(selected_item);
                        }
                        else{
                           selected_items.splice(index, 1);
                        }
                    });
                    $("#submit-button").click(function(){
                        $.ajax({
                            url: '/requestaccess/',
                            data: {'request_reports': selected_items.join(","), 'csrfmiddlewaretoken': {{csrfmiddlewaretoken}} },
                            dataType: 'json',
                            type: 'post',
                            success: function (data) {
                            }
                        });
                    });
                })
                </script>

                <input class="btn btn-primary" type="button" method = "POST" value="Request Access">
              </div>

    </form>

这是用户选择复选框的个人资料页面的视图。

    def profile(request):
        owner = User.objects.get (formattedusername=request.user.formattedusername)
        reportdetail = QVReportAccess.objects.filter(ntname = owner.formattedusername, active = 1).values('report_name_sc')

        reportIds = QVReportAccess.objects.filter(ntname = owner.formattedusername).values_list('report_id', flat=True)
        reportaccess = QvReportList.objects.filter(report_id__in= reportIds).values_list('report_name_sc', flat = True)
        reportGroups = QVReportAccess.objects.filter(ntname = owner.formattedusername).values_list('report_group_id', flat=True)
        reportlist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).exclude(active=0)
        allreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 100)
        bhreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 200)
        cereportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 500)
        finreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 600)
        careportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 800)
        pireportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1100)
        screportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1200)
        dssreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1300)
        psgreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1400)
        othreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 99999)

#        if request.method == 'POST':
#            reportnamesc = request.POST.get('report_name_sc', '')
#            checked = request.POST.get('request_reports', '')
#            request_reports = #request_reports.objects.get(report_name_sc=reportnamesc)
#            request_reports.request_reports = checked
#            request_reports.save()

        args = {'user':owner, 'applicationaccess':reportaccess, 'applicationlist':reportlist, 'bhgrouplist':bhreportgrouplist, 'cegrouplist':cereportgrouplist, 'fingrouplist':finreportgrouplist
              , 'cagrouplist':careportgrouplist, 'pigrouplist':pireportgrouplist, 'scgrouplist':screportgrouplist, 'dssgrouplist':dssreportgrouplist, 'psggrouplist':psgreportgrouplist
              , 'othgrouplist':othreportgrouplist, 'allgrouplist':allreportgrouplist}

        return render(request, 'accounts/profile.html', args)

但是,由于我的帖子从未出现,ajax 不会保存我的值,我可以在我的表单上执行 request.POST['request_reports'] 以仅提取已检查的报告。

如果有更好的方法来完成将报告减少到用户从一个 html 模板到表单的选择的任务,我愿意接受建议。

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您不会阻止按钮的默认操作,即提交表单 - 反过来使用默认操作 GET。

    让您的点击事件处理程序采用event 参数并调用event.preventDefault();

    【讨论】:

    • 谢谢 Daniel,效果很好,我还注意到我的按钮没有包含按钮 id = "submit-button" 以匹配 ajax "#submit-button"。
    • 我还有一个问题要问你。按下按钮时,我可以在我的 url 中看到请求。我必须在我的 URL 中进行哪些更改才能使路由正常工作? 127.0.0.1:8000/account/profile/… 是我的 URL 现在的样子,我的 URL.py 有 url(r'^requestaccess/$', views.requestaccess, name='requestaccess')
    • 对不起,我不太明白你的问题。
    猜你喜欢
    • 2019-04-12
    • 2020-05-19
    • 2017-05-17
    • 2021-06-13
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多