在Django网站上,我正在尝试检查字段输入中是否存在数据库匹配项。我的Django .py文件中有搜索功能,但是由于页面加载后无法运行它们,因此我认为JavaScript POST请求是最好的选择。
<input id="this_field" onblur="querySomething()">
在JS POST [1,2,3等]上有很多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)