【问题标题】:AJAX POST to DJANGO and get result back to frontendAJAX POST 到 DJANGO 并将结果返回到前端
【发布时间】:2020-10-28 00:04:24
【问题描述】:

我正在尝试编写一个使用 javascript "JQUERY" $get 的工具。以异步方式从多个 API 中获取数据。数据被推送到查询并通过 AJAX 发送到 DJANGO。那行得通,但是..数据应该通过Python在后端编辑,然后应该发送回前端。 问题:数据显示在我对检查器工具 (FIREFOX) 的回答中,但不在我的 HTML 中。

我的 HTML:

<form method="POST" action="/my_page/" id="test_form">
 {% csrf_token %}
 <input type="text" id="name" name="name" placeholder="Type Keywords ...">
 <input type="submit" value="GO!"></input>
</form>                                      

                                   
<tbody>
{% for task in tasks %}                                
 <tr>
  <td>
   {{ task }}
  </td>
 </tr>
{% endfor %}
</tbody>

js:

$(document).on('submit','#test_form', function(e){
    e.preventDefault();

    var daten = [];
    var input = $('#name').val();
    var apis = [
        API1, API2, API3,...... and so on to API 50
    ];

    var api;
    for (api of apis){
        $.get(api, function(data){
            for (bla of data.suggestions){
                daten.push(bla.value)
            };
        });
    };


    const promise3 = new Promise((resolve, reject) => {
        setTimeout(resolve, 2000, daten);
    });
    
    Promise.all([promise3]).then((values) => {

        $.ajax({
            type: 'POST',
            url: '/my_page/',
            data: {'daten[]': values},
            
            success:function(data){
                console.log(data);
            }
        });
        return false;
    });
});

views.py:

@csrf_exempt
def my_page(request):

        if request.is_ajax():
            tasks = request.POST.getlist('daten[]')

            print(tasks) #That works fine
                

            return render(request, 'myApp/my_page.html', {
                'tasks':tasks,
            })

        else:
            return render(request, 'myApp/my_page.html')

我已经研究了几天的解决方案,但我快要绝望了。有人可以帮帮我吗?

【问题讨论】:

  • 你试过{{ for task in data }} 吗?
  • 感谢乔纳斯,但这不是问题所在。我认为问题出在我的 js 或 HTML 表单中。通常我只在表单中使用 method="POST" action="/my_page/" 。提交后,它总是用数据重新加载模板。但是当使用表单 ID 时,Django 模板在提交后不会重新加载。只是 js 正在工作并将 .get 的结果发送到我的后端。从js获取数据后是否有重新加载Django模板的功能以在前端显示结果?

标签: jquery django ajax post request


【解决方案1】:

所以我假设console.log(data) 中打印的是 HTML 响应。

您需要做的是动态替换 DOM 的内容。 HTML

<div id="my-container-id">
  <form method="POST" action="/my_page/" id="test_form">
   {% csrf_token %}
   <input type="text" id="name" name="name" placeholder="Type Keywords ...">
   <input type="submit" value="GO!"></input>
  </form>                                      

                                   
  <tbody>
  {% for task in tasks %}                                
   <tr>
    <td>
     {{ task }}
    </td>
   </tr>
  {% endfor %}
  </tbody>
</div>

js

    Promise.all([promise3]).then((values) => {

        $.ajax({
            type: 'POST',
            url: '/my_page/',
            data: {'daten[]': values},
            
            success:function(data){
                console.log(data);
                $('#my-container-id').replaceWith(data);
            }
        });
        return false;
    });

编辑:更新了我的答案,使其更具插件性和可用性

【讨论】:

  • 最后,您的解决方案是成功的关键。非常感谢你是我今天的英雄文森特!
猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 2011-12-02
  • 2013-11-23
相关资源
最近更新 更多