Ajax делает два GET-запроса, когда это необходимо, когда это должен быть только один - PullRequest
0 голосов
/ 05 декабря 2018

Ajax вызывает два GET-запроса, только для почтовых индексов, начинающихся и заканчивающихся 0. Он использует jQuery, чтобы получить значение поля zip, проверяет значение, чтобы узнать, равно ли оно 5, а затем делает запрос get к Django.посмотреть во втором блоке кода.Успех в вызовах Ajax перебирает список и отображает его на веб-странице.Проблема состоит в том, что это должен быть только один запрос GET, но иногда иногда он делает два ...

$( "#zip" ).keyup(function() {
      if ($(this).val().length===5){
                var zip = $(this).val()
                $.ajax({
                  type: 'GET', 
                  url: '/zipcode',
                  data: {
                    number: $(this).val(),
                  },
                  dataType: "json",
                  success: function(data) {
                    $(".zip_response").remove();
                    var zipList = JSON.parse(data);
                    var container = $('<div />');
                    for(var j=0; j< zipList.length; j++){
                        container.append($('<li href="#" />').addClass("zip_response").text(zipList[j]["city"]+','+zipList[j]["state"]));
                    }
                    $('.zip_menu').append(container);
                    $('.zip_menu').show();
                  },
                  error: function (errorThrown) {
                  },
                }); 
        }
});

При этом почтовый индекс выполняет вызов базы данных и возвращает строку (и), если она существуетили возвращает «Нет» для информации о городе и штате.

def zipcode(request):
    if request.is_ajax():
        number = int(request.GET['number'])
        zip_list = Zip.objects.raw('SELECT * FROM users_zip WHERE zip_code = %s', [number])

        data=[]
        for item in zip_list:
            data.append({'city': item.city, 'state': item.state})

        json_data = json.dumps(data)

        if not data:
            json_data = json.dumps([{'city': "None", "state": "None"}])

        print(json_data) #Testing to see what values it holds. 

        return JsonResponse(json_data, safe=False)

Это работает во всех случаях, кроме случаев, когда почтовый индекс начинается или заканчивается 0. Это результат печати (json_data).Опять должен быть только один.

[{"city": "PEABODY", "state": "MA"}, {"city": "WEST PEABODY", "state": "MA"}]
[04/Dec/2018 21:34:43] "GET /zipcode?number=01960 HTTP/1.1" 200 95
[{"city": "PEABODY", "state": "MA"}, {"city": "WEST PEABODY", "state": "MA"}]
[04/Dec/2018 21:34:43] "GET /zipcode?number=01960 HTTP/1.1" 200 95

Или когда все сделано правильно ...

[{"city": "RICHMOND", "state": "CA"}]
[04/Dec/2018 21:52:32] "GET /zipcode?number=94850 HTTP/1.1" 200 47

Это работает так, как можно подумать, за исключением этой проблемы ...

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