如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?
Posted
技术标签:
【中文标题】如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?【英文标题】:How to send a simple data by Ajax jQuery to views.py in Django? 【发布时间】:2021-10-18 17:52:42 【问题描述】:我想使用 Ajax jQuery 将 home.html 中的简单数据(数字)发送到 views.py 中的函数。但似乎该函数没有被调用。
home.html: 我正确地得到了成功响应。我在成功通知上看到了 tagID。我想在我的意见中看到这一点。py
...
function GetInfo(e)
document.getElementById("test3").innerHTML = e.target.myCustomID;
var tagID = e.target.myCustomID;
$.ajax(
url: 'Ajax1',
type: "POST",
data:
'tagID': tagID,
'csrfmiddlewaretoken': ' csrf_token ',
,
success: function (data)
alert ("Congrats! You sent some data: " + tagID);
,
error: function()
alert ("Something went wrong");
);
views.py: 我想看看这个函数是由ajax调用的。因此,如果命令 print ("AAAAAAAAAAAA") 有效,我很高兴!
...
@csrf_exempt
def Ajax1(request):
print ("AAAAAAAAAAAAA")
if request.is_ajax() and request.POST():
print("BBBBBBBBBBBBB")
TagID = request.POST.get('tagID', None)
else:
raise Http404
my_app/urls.py
urlpatterns = [
url(r'', views.home_map, name="home"),
url(r'^ajax/$', views.Ajax1, name="Ajax")
]
urls.py
urlpatterns = [
path(r'', include('my_app.urls')),
path('admin/', admin.site.urls),
path(r'^ajax/$', Ajax1, name='Ajax')
]
你能告诉我我错过了什么吗?谢谢
更新
根据善意的建议,我做了一些更改。这仍然不起作用。
**views.py: **
def ajax1(request):
TagIDD = request.POST['object_type']
print("AAAAAAAAAAAAAAAAA", TagIDD)
if request.is_ajax() and request.method == "POST":
print("BBBBBBBBBBBBB")
TagID = request.POST.get('tagID')
else:
raise Http404
# TagID = request.POST('tagID')
print ("Hello")
print(TagID)
response =
'TagID': TagID
return HttpResponse(response)
home.html
function GetInfo(e)
document.getElementById("test3").innerHTML =
e.target.myCustomID;
const tagID = e.target.myCustomID;
$.ajax(
type: "POST",
url: " 'ajax-view/' ",
data:
'csrfmiddlewaretoken': ' csrf_token ',
'tagID': tagID
,
success: function (data)
alert ("Congrats! You sent some data: " +
tagID);
,
error: function()
alert ("Something went wrong");
)
;
</script>
my_app\urls.py:
urlpatterns = [
url(r'', views.home_map, name="home"),
url('ajax-view/', views.ajax1, name='ajax-test-view')
]
urls.py:
urlpatterns = [
path(r'', include('wrms01_map.urls')),
path('admin/', admin.site.urls),
]
不过,ajax 似乎没有在views.py 中调用函数“ajax1”。但我可以看到成功通知。提前致谢。
【问题讨论】:
给 JS 的 URL 需要是你的urls.py
文件中的 URL。也许通读此书对您有所帮助; djangocentral.com/django-ajax-with-jquery
... and request.method == 'POST':
@markwalker_ 谢谢。我尝试了所有名称和网址,例如 url: "% url 'Ajax' %",但它没有让应用程序打印 "AAAAA" 这意味着该函数没有被调用。
@WillemVanOnsem 谢谢,我把打印“AAAAAAA”放在前面,以确保它正在调用 Ajax1 函数。但它不是。我认为问题可能出在 url.py 或其他地方
【参考方案1】:
你做错了 ajax 调用。您必须在 url 中传递端点的 EXACT URL:''
您所做的是传递一个字符串“Ajax1”,在您的 urls.py 中找不到该字符串。在您的 urls.py 中,您有 'ajax' 作为 url 模式,而 Ajax1 是您的视图函数名称。
此外,我在您的 urls.py 中观察到,对于 2 种不同的视图方法,您具有相同的模式(这是一种不好的做法)。
现在在您的 ajax 中执行此操作
$.ajax(
url: "%url 'Ajax'%", //This is the jinja template tag that will automatically fill in the url pattern from your urls.py corresponding to the name of that url pattern
type: "POST",
data:
'tagID': tagID,
'csrfmiddlewaretoken': ' csrf_token ',
,
success: function (data)
alert ("Congrats! You sent some data: " + tagID);
,
error: function()
alert ("Something went wrong");
)
【讨论】:
感谢 Ruchit。我对我的问题进行了更新。请你检查一下好吗?谢谢【参考方案2】:所以,看来我在 urls.py 中有错误
urls.py:
urlpatterns = [
path('', views.home_map, name='home.html'),
path('admin/', admin.site.urls),
path('ajax-view/', views.ajax1)
# path('ajax/', ajax1, name='ajax1')
]
home.html:
$.ajax(
type: "POST",
url: ' "ajax-view/" ',
data:
'csrfmiddlewaretoken': ' csrf_token ',
'tagID': tagID
,
success: function (data)
alert ("Congrats! You sent some data: "
+tagID)
,
error: function()
alert ("Something went wrong");
)
;
【讨论】:
以上是关于如何通过 Ajax jQuery 将简单数据发送到 Django 中的views.py?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery ajax 将选中复选框的值发送到另一个页面
通过 JQuery AJAX 一起发送 FormData 和 String 数据?
JSON 格式(通过 jQuery AJAX 发送 JSON 到 Java/Wicket 服务器)
如何将 JQuery AJAX 请求中的数据发送到 Node.js 服务器