在Django网站上,我正在尝试检查字段输入中是否存在数据库匹配项。我的Django .py文件中有搜索功能,但是由于页面加载后无法运行它们,因此我认为JavaScript POST请求是最好的选择。

<input id="this_field" onblur="querySomething()">


在JS POST [123等]上有很多SO问题,但是,我无法让其中任何一个为我工作。这是我尝试做一些有用的事情的尝试之一:

function querySomething(){
    $.ajax({
       type: "POST",
       url: "/my/url/",
       data: {"check_this": "123-456789",},
       success: function() {
         alert('success');
       }
    });


要么,

function postSearch() {
    $.post("/my/url/",
    {
        "check_this": "123-456789",
    },
    function(data, status){
        alert("Data: " + data + "\nStatus: " + status);
    })
}


如果我只是将输入视为搜索字段,然后提交(使用JS或其他方式),则效果很好。但是,由于我试图提供结果以帮助用户完成页面的其余部分的填写,因此我需要用户焦点离开该字段后,结果才能在同一页面上显示。

我不知道我的{% csrf_token %}令牌是否在这里起作用。我在控制台或服务器日志中没有收到任何错误或消息。

//现在,已编辑的代码版本为:

function querySomething(){
    $.ajax({
        type: "POST",
        url: "/my/url/",
        headers: {
            "Content-Type": "application/json",
            "HTTP_GROUP_NAME": "groups_name",
        },
        data: {
            "check_this": $('#this_field').val(),
            "csrfmiddlewaretoken": "{{csrf_token}}",
        },
        success: function(data){
            console.log("success");
            console.log(data);
        },
        failure: function(data){
            console.log("failure");
            console.log(data);
        },
    });
    alert('marcusShep function ran.')
}

最佳答案

您正在用"check_this": "123-456789",硬编码过帐数据。

您可以使用GET而不是POST,因为您没有创建元素。但是,您正在检索一些。

另外,您还没有定义failure函数。这将帮助您进行很多调试。

$.ajax({
    type: "GET",
    url: "/my/url/",
    data: {
        "check_this": $("#this_field").val(),
    },
    success: function(data){
        console.log("success");
        console.log(data);
    },
    failure: function(data){
        console.log("failure");
        console.log(data);
    },
});


然后,您的视图应类似于:

form django.http import JsonResponse

def foo(request, *a, **kw):
    # Notice I didn't directly try to access request.GET["check_this"]
    search_value = request.GET.get("check_this", None)
    if search_value:
        data = dict()
        # Finding some data that you want.
        data["result"] = MyModel.objects.filter(name=str(search_value))
        # Using Django's beautiful JsonResponse class
        # to return your dict as JSON.
        return JsonResponse(data, verify=false)

10-05 20:49
查看更多