[英]Django Javascript POST request
在Django網站上,我正在嘗試檢查字段輸入中是否存在數據庫匹配項。 我的Django .py文件中有搜索功能,但是由於頁面加載后無法運行它們,因此我認為JavaScript POST請求是最好的選擇。
<input id="this_field" onblur="querySomething()">
上有JS POST眾多SO問題[ 1 , 2 , 3 ,等],但是,我一直沒能得到任何他們為我工作。 這是我嘗試做一些有用的事情的嘗試之一:
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.