簡體   English   中英

Django Javascript POST請求

[英]Django Javascript POST request

在Django網站上,我正在嘗試檢查字段輸入中是否存在數據庫匹配項。 我的Django .py文件中有搜索功能,但是由於頁面加載后無法運行它們,因此我認為JavaScript POST請求是最好的選擇。

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

上有JS POST眾多SO問題[ 123 ,等],但是,我一直沒能得到任何他們為我工作。 這是我嘗試做一些有用的事情的嘗試之一:

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",對發布數據進行硬編碼"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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM