У меня есть форма с несколькими кнопками, которая сопоставлена ​​с представлением 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",
            ...
2
Manish Gupta 5 Янв 2016 в 13:10

2 ответа

Лучший ответ

Вы можете отправить несколько data в запросе AJAX, который будет различать две функции:

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()
5
gtlambert 5 Янв 2016 в 10:22

Согласитесь с @gtlambert, но это можно сделать более кратким следующим образом:

if request.method == 'POST':
    if request.POST['action'] == 'start_manifest':
        call_function1()
    elif request.POST['action'] == 'close_manifest':
        call_function2()
0
CORTIZ 12 Апр 2020 в 08:16