ПОЛУЧИТЬ запрос, не имеющий полной информации - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть HTML-форма, показанная ниже.

<form>
My Name:<input type="text" name = "myName">
<select name="myCountry">
  <option>India</option>
  <option>Russia</option>
  <option>United States of America</option>
</select>
<input type="submit" name="Save">
</form>

Предположим, я ввожу свое имя Ашок, выбираю "Соединенные Штаты Америки" и нажимаю кнопку отправки.В строке поиска я вижу следующее:

myWeb.com/myPage/?myName=Ashok&myCountry=United&Save=Submit

В запросе GET присутствует только 'United', но на самом деле он должен выглядеть следующим образом

myWeb.com/myPage/?myName=Ashok&myCountry=United+States+of+America&Save=Submit  

Обновлены детали

HTML-шаблон

{% extends "base.html" %}
{% block content %}
{% load static %}
<div id="content">
<form >
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
            <!-- Sidebar Holder -->
    <div>
   </i><strong>Enter Persona Name</strong>: &nbsp <input type="text" name="person_name" , required="">
    <br><br><br>
    </i>Select your Key: &nbsp <select class="keyDropDown" name="key_name">
        <option disabled selected value> -- Select a Key -- </option>
        <option value="name">Name</option>
        <option value="ip">ip</option>
        <option value="country">Country</option>
        <option value="city">City</option>
        <option value="region">Region</option>
        <option value="device_type">Device Type</option>
        <option value="device">Device</option>
        <option value="visits">Visits</option>
        <option value="page">Pages Visited</option>
        <option value="items">Items Searched</option>
        <option value="user_id">User Id</option>
        <option value="browser">Browser</option>
    </select>
    <br><br>
</i>Enter your desired label for above selected key: &nbsp <input type="text" name="key_label">
    <br>
    <br>
    </i> Select value for your Key: &nbsp <select class="valueOfKey" name="key_value">
    </select>
    <br>
    <br>
     <input type="submit" name="Save">
</div>
</form>
<script type="text/javascript">

    $(document).on("change", ".keyDropDown", function() {

    $.ajax({
        url: "value_choices",
        type: "GET",
        data: {key: $(".keyDropDown").val()}, // $(this) is the first dropdown element, we need it's value
        dataType: "json",
        success: function(response) {
            if (response.data) {
                var secondDropdown = $(".valueOfKey"); // select 2nd dropdown
                secondDropdown.empty();                // empty dropdown
                secondDropdown.append(
                        "<option " + "disabled selected value" + ">" +"Select corressponding value for key" + "</option>");
                for (var item of response.data) {      // loop response & create options
                        console.log(item)
            secondDropdown.append(
                        "<option value=" + item +">" + item + "</option>"

                    );
                }
            }
        },

            error: function (jqXHR, exception) {
                                var msg = '';
                                if (jqXHR.status === 0) {
                                    msg = 'Not connect.\n Verify Network.';
                                } else if (jqXHR.status == 404) {
                                    msg = 'Requested page not found. [404]';
                                } else if (jqXHR.status == 500) {
                                    msg = 'Internal Server Error [500].';
                                } else if (exception === 'parsererror') {
                                    msg = 'Requested JSON parse failed.';
                                } else if (exception === 'timeout') {
                                    msg = 'Time out error.';
                                } else if (exception === 'abort') {
                                    msg = 'Ajax request aborted.';
                                } else {
                                    msg = 'Uncaught Error.\n' + jqXHR.responseText;
                                }
                                $('#post').html(msg);
                                               },
                                       });
                                   });

</script>
</div>
</div>
{% endblock %}

Вот мое представление Django

Представление Django

class ValueChoicesView(View):
    def get(self, request, *args, **kwargs):
        key = request.GET.get('key')
        if key is None:
            return HttpResponse(json.dumps({
                "error": "Field 'key' is required."
            }), content_type='application/json')
        # another validation would be if the key belongs in `ModelA`

        if key == 'page':
            data = []
            key_qs = Page.objects.all().values(key)


            for item in key_qs:
                if item[key] not in data:
                    data.append(item[key])

            return HttpResponse(json.dumps({"data": data}), content_type="application/json")

        else:

            data = []
            key_qs = VisitorInfo.objects.all().values(key)

            for item in key_qs:
                if item[key] not in data:
                    data.append(item[key])
            return HttpResponse(json.dumps({"data": data}), content_type="application/json")

def TestPageView(request):
    x=PersonSave(request)
    person_name = x[0]
    person_key = x[1]
    person_key_label=x[2]
    person_key_value=x[3]
    person_submit=x[4]
    if(x[4]=='Submit'):
        testPerson = TestPersona(name=person_name,key=person_key,label=person_key_label,value=person_key_value)
        testPerson.save()
    return render(request,'dashboard/test_page.html')

def PersonSave(request):
    person_name = request.GET.get('person_name',)
    person_key = request.GET.get('key_name',)
    person_key_value = request.GET.get('key_value',)
    person_key_label = request.GET.get('key_label',)
    person_submit = request.GET.get('Save',)
    #print(str(person_name) + " " + str(person_key)+ " " + str(persona_key_label) + " " + str(persona_key_value))
    return(str(person_name) ,str(person_key) ,str(person_key_label), str(person_key_value),str(person_submit))

Снимок экрана перед отправкой формы (подробности были заполнены)

enter image description here

Снимок экрана после нажатия кнопки отправки.

На этом рисунке вы видите в адресной строке, что key_value = United , но должно быть key_value = United + States .

enter image description here

1 Ответ

0 голосов
/ 07 декабря 2018

Это работает для меня:

<form action="" method="get">
    My Name:<input type="text" name="myName">
    <select name="myCountry">
        <option value="India">India</option>
        <option value="Russia">Russia</option>
        <option value="United States of America">United States of America</option>
    </select>
    <input type="submit" value="Save">
</form>

Я добавил значения к опциям, атрибут «method» для тега «form» и изменил атрибут «name» на «value» в вводе ввода.

Это работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...