Ajax在应该仅应一个时发出两个GET请求

时间:2018-12-04 21:48:39

标签: jquery ajax django

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

除了这个问题,它的作用就像人们想的那样。

0 个答案:

没有答案