如何通过 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 服务器

使用 jquery AJAX 将数据发送到 php 并检索响应

如何在 jquery 中创建关联数组并通过 ajax 发送以使用 php 解析?