Ajax调用仅针对以0开头和结尾的邮政编码执行两个GET请求。它使用jQuery获取zip字段的值,并检查该值是否等于5,然后向Django进行get请求在第二个代码块中查看。 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开头或结尾时除外。这是来自print(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
除了这个问题,它的作用就像人们想的那样。