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
Это работает так, как можно подумать, за исключением этой проблемы ...