如何在 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");}
                        })
                };