如何在 Django 中通过 Ajax jQuery 向 views.py 发送简单数据?
How to send a simple data by Ajax jQuery to views.py in Django?
我想使用 Ajax jQuery 将 home.html 中的简单数据(数字)发送到 views.py 中的函数。但是似乎没有调用函数。
home.html:
我正确地得到了成功响应。我在成功通知中看到了 tagID。我想在我的 views.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 ("AAAAAAAAAAAAA") 有效,我很高兴!
...
@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”。但是我可以看到成功通知。提前致谢。
您的 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");
}
})
所以,看来我在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 将 home.html 中的简单数据(数字)发送到 views.py 中的函数。但是似乎没有调用函数。
home.html: 我正确地得到了成功响应。我在成功通知中看到了 tagID。我想在我的 views.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 ("AAAAAAAAAAAAA") 有效,我很高兴!
...
@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”。但是我可以看到成功通知。提前致谢。
您的 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");
}
})
所以,看来我在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");}
})
};