【问题标题】:Django Javascript POST requestDjango Javascript POST 请求
【发布时间】:2016-10-18 13:15:22
【问题描述】:

在 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.')
}

【问题讨论】:

    标签: javascript django post


    【解决方案1】:

    您正在使用"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)
    

    【讨论】:

    • 硬编码以限制在此处粘贴时可能出现的错误。我将{% csrf_token %} 更改为"{{csrf_token}}" 以修复... unexpected &lt; 错误,因为前者将隐藏的&lt;input 字段放入JS 而不仅仅是值。仍然没有指示失败或成功的控制台消息。尝试使用和不使用添加的标题。即使 URL 有问题,我仍然应该期待一些控制台错误,对吗?
    • @whyeliah 如果您觉得这个答案有帮助,您应该考虑接受它。
    猜你喜欢
    • 2020-10-28
    • 2010-10-16
    • 2013-02-08
    • 1970-01-01
    • 2013-10-07
    • 2016-03-24
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多