Javascript Django/AJAX/JQuery-简单的POST问题

Javascript Django/AJAX/JQuery-简单的POST问题,javascript,jquery,html,ajax,django,Javascript,Jquery,Html,Ajax,Django,我正在尝试实现我能想到的最简单的AJAX帖子,因为我对AJAX和JQuery还不熟悉。这个想法是这样的:我有一个按钮,当它被点击时,我想将基本的POST数据提交到同一个页面(页面是:http://{my ip address}}/django/ajax/) 在我的.html文件中,我有: <script type="text/javascript"> function pythonizer(){ $("#msgid").append("it SHOULD po

我正在尝试实现我能想到的最简单的AJAX帖子,因为我对AJAX和JQuery还不熟悉。这个想法是这样的:我有一个按钮,当它被点击时,我想将基本的POST数据提交到同一个页面(页面是:http://{my ip address}}/django/ajax/)

在我的.html文件中,我有:

<script type="text/javascript">
    function pythonizer(){
        $("#msgid").append("it SHOULD post after this is appended");
        $.ajax({ 
        url: '/django/ajax/', 
        type: 'POST', 
        data: {'obj': "test string"}, 
        dataType: 'json', 
        contentType: "application/json; charset=utf-8",
        success: function(response) {
                   alert(response);
            }
        }); 
        }
</script>    

<div id="msgid">
</div>

<input type="button" id="myButton" value="click me" onclick="pythonizer()" />
很简单,对吧?然而,问题是,当我单击我的按钮时,“它应该在追加后发布”被成功地添加到div中,但没有发生其他事情,HttpResponse(“helloajax”)没有返回,发布不起作用


我所写的似乎与我读过的文档一致,但我有一种感觉,我要么遗漏了一些愚蠢的东西,要么试图将文章过于简单化。提前谢谢

我不知道django或python,但是javascript的问题是,当AJAX调用完成时,它什么都不做

<script type="text/javascript">
function pythonizer(){
    $("#msgid").append("it SHOULD post after this is appended");
    $.ajax({ 
    url: '/django/ajax/', 
    type: 'POST', 
    data: {'obj':data},   // <-- possible error?
    dataType: 'json', 
    contentType: "application/json; charset=utf-8",  
    success: function (response) {
        alert(response);
    }
    }); 
    }
</script>

函数pythonizer(){
$(“#msgid”).append(“它应该在追加后发布”);
$.ajax({
url:“/django/ajax/”,
键入:“POST”,
数据:{'obj':数据},//这里可能有错误

    success: function(response) 
没有调试信息,我不能告诉你更多。。。 python是否接收到请求?可能是它拒绝CSRF验证的问题,您需要添加并导入它:

@csrf_exempt
def myview(request):
    print 'hello'
也许你可以在这里读到更多关于它的内容:

也许一开始最好不要那么深,对吗

那么为什么不使用另一个jQuery快捷方式呢

$.post('/django/ajax/', data, function(data){
                                 alert(data);
                              });
也许我弄错了您的个人代码,但我想您可以在这里的官方帮助下找到答案:

这有两个好处:

  • Firebug(Mozilla firefox和其他一些浏览器也不错)
  • Django调试工具栏

  • 它们对于python和jQuery方面的调试都很好…试着学习使用它们…(如果你还没有,很抱歉在这种情况下告诉你一件很明显的事情:)

    我假设你想要一个JSON响应

    解释了可以使用的不同数据类型。当使用
    dataType:'json'
    时,ajax方法希望响应上下文类型为json

    在模板html文件中,尝试以下操作:

    <script type="text/javascript">
    function pythonizer(){
        var data = "data";
        $("#msgid").append("it SHOULD post after this is appended");
        $.ajax({ 
            url: '/django/ajax/', 
            type: 'POST', 
            data: {obj:data},
            dataType: 'json', 
            contentType: "application/json; charset=utf-8",  
            success: function (response) {
                alert(response);
            }
            error:function(){
                alert("failure");
            }
        }); 
    }
    </script>
    

    您有JS错误吗?可能JS变量“data”未定义。我已将其更改为更显式。它现在是data:{'obj':“test string”}。不过,这篇文章似乎仍然没有成功运行。我建议,如果您使用Firefox,请安装Firebug;如果您使用Chrome,请打开Javascript控制台,检查错误。您还可以使用每个浏览器的“网络”选项卡,查看您的ajax请求是否实际通过,以及状态如何。如果“undefined”这不是一个错误,只是因为
    pythonizer()
    没有返回任何内容-如果您添加
    return true;
    或其他内容,最后它会显示
    true
    response
    很好。如果我不清楚,很抱歉-您会添加“return true;“
    pythonizer
    函数的结尾。
    未定义的
    绝对不是一个错误。您查看了网络选项卡吗?通过检查网络选项卡,您将能够确定帖子是否正在发生。好的,我得到了pythonizer()函数现在返回true。每次我运行该函数时,都会在Chrome的“网络”选项卡中添加一个方法:POST entry。状态为:200 OK。这听起来像是POST正在成功运行…但是为什么没有弹出警报窗口?也许可以试着去掉dataType和contentType属性-因为返回的内容不匹配这些,也许jQuery正试图变得聪明,并将其标记为失败,即使它成功地返回。
    <script type="text/javascript">
    function pythonizer(){
        var data = "data";
        $("#msgid").append("it SHOULD post after this is appended");
        $.ajax({ 
            url: '/django/ajax/', 
            type: 'POST', 
            data: {obj:data},
            dataType: 'json', 
            contentType: "application/json; charset=utf-8",  
            success: function (response) {
                alert(response);
            }
            error:function(){
                alert("failure");
            }
        }); 
    }
    </script>
    
    import json
    from django.http import HttpResponse
    
    def ajax(request):
        if request.method == 'POST':
            return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")