Как передать 2 переменные с помощью JSON-дампов в функцию AJAX? - PullRequest
0 голосов
/ 29 июня 2018

Я хочу передать две переменные: имя_ сценария и идентификатор_сценария из моего представления в мою функцию ajax в html-коде.

Таким образом, в основном в базе данных каждая организация может иметь несколько сценариев. Модели организации и сценария имеют по два поля: поле идентификатора и поле имени.

И еще одно мое сомнение: как я передаю его в ajax, как мне получить доступ к переданным переменным?

my views.py

from django.shortcuts import render, redirect
from Organization.models import Organization
from django.http import HttpResponse
from Scenario.models import Scenario
import json
from django.core import serializers


def alertindex(request):
return render(request, 'alertindex.html', {
    'Organization': Organization.objects.all(),
    })
def get_scenario(request):
    org_id = request.GET.get('org_id')
    organization = Organization.objects.get(pk=int(org_id))
    scenario = organization.scenario_set.all()
    scenarios = serializers.serialize("json", scenario)
    return scenarios 

urls.py

from . import views
from django.conf.urls import url


urlpatterns = [
    # Add alert url
    url(r'^$', views.alertindex, name='alertindex'),
    # Bind data in scenario drop down
    url(r'^/Scenario$', views.get_scenario,   name='Get_Scenario'),

]

моя функция ajax

       var orgID = $(this).val();
        var scenarios = '{{ scenarios }}'
        $.ajax({
            type: "GET",
            url: "{% url 'Get_Scenario' %}",
            data: { org_id: orgID},
                success: function () {
                var udata = "";
                for (var i = 0; i < scenarios.length; i++) {
                    udata = udata + "<option value='"+ scenarios[i].scenario_id + "'>" + scenarios[i].scenario_name + "</option>"
                $("#txtScenario").append(udata);
            }
    },
});

URL Get_Scenario связывает меня с моим представлением с функцией get_scenario.

Ошибка, с которой я сталкиваюсь - объект "str" ​​не имеет атрибута "get" "

Traceback:

Файл "/Users/anirudhchakravarthy/anaconda3/lib/python3.6/site-packages/django/core/handlers/exception.py", строка 35, во внутреннем response = get_response (запрос) Файл "/Users/anirudhchakravarthy/anaconda3/lib/python3.6/site-packages/django/utils/deprecation.py", строка 97, в вызов response = self.process_response (запрос, ответ) Файл "/Users/anirudhchakravarthy/anaconda3/lib/python3.6/site-packages/django/middleware/clickjacking.py", строка 26, в process_response если response.get ('X-Frame-Options') не является None: AttributeError: у объекта 'str' нет атрибута 'get'

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете использовать JsonResponse. Вот пример кода.

(Лучше проверить попытку / исключение и отправить 404, когда не найден объект)

from django.http import JsonResponse

def get_scenario(request):
    org_id = request.GET.get('org_id')
    # you can do your own validation
    try:
        organization = Organization.objects.get(pk=int(org_id))
        scenario = organization.scenario_set.all()
        scenarios = serializers.serialize("json", scenario)
    except ObjectDoesNotExist:
        data = {
            'result': 'fail',
        }
        return JsonResponse(status=404, data)

    data = {
        "scenarios": scenarios,
        # add more data you want
    }

    return JsonResponse(data) 

Для получения дополнительной информации о JsonResponse, просто отметьте здесь

...