【问题标题】:how to pass multiple ajax calls in a single django view如何在单个 Django 视图中传递多个 ajax 调用
【发布时间】:2016-01-05 10:10:53
【问题描述】:

我有一个带有多个按钮的表单,它映射到 django 视图。喜欢:

<form name="demo-form" method="POST" action="{% url 'internalManifest' %}">
    <button class="btn btn-success" name="start_manifest">Start Manifest</button>
    <button class="btn btn-success" name="close_manifest">Close Manifest</button>
</form>

上面的两个按钮从models.py调用了两种不同的方法,但我可以从一个django视图中做到这一点。喜欢:

Django 视图:

if request.method == 'POST' and 'start_manifest' in request.POST:
    call_function1()
if request.method == 'POST' and 'close_manifest' in request.POST:
    call_function2()

我的问题是,如何根据按钮名称将两个不同的 ajax 请求发送到同一个视图函数?

假设我有 2 个 ajax 请求。两者都从models.py调用不同的方法。我想根据按钮名称发送 ajax 调用。喜欢:

jQuery(document).ready(function($){
    $('[name="form_internal_manifest"]').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url : "/internalmanifest/",
            type : "POST",
            ...

jQuery(document).ready(function($){
    $('[name="form_internal_manifest"]').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url : "/internalmanifest/",
            type : "POST",
            ...

【问题讨论】:

  • 您不需要单独的ready(){...} 块中的那些。

标签: jquery python ajax django


【解决方案1】:

您可以在 AJAX 请求中发送一些 data 来区分这两个函数:

jQuery(document).ready(function($){
    $('[name="form_internal_manifest"]').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url : "/internalmanifest/",
            type : "POST",
            data: {action: 'start_manifest'},
            ...

jQuery(document).ready(function($){
    $('[name="form_internal_manifest"]').on('submit', function(event){
        event.preventDefault();
        $.ajax({
            url : "/internalmanifest/",
            type : "POST",
            data: {action: 'close_manifest'},
            ...

您发送的数据将在request.POST 字典对象中可用,因此您可以对其进行如下条件处理:

if request.method == 'POST' and request.POST['action'] == 'start_manifest':
    call_function1()
if request.method == 'POST' and request.POST['action'] == 'close_manifest':
    call_function2()

【讨论】:

    【解决方案2】:

    同意@gtlambert,但可以更简洁如下:

    if request.method == 'POST':
        if request.POST['action'] == 'start_manifest':
            call_function1()
        elif request.POST['action'] == 'close_manifest':
            call_function2()
    

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      相关资源
      最近更新 更多