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

时间:2011-07-16 22:58:10

标签: javascript jquery html ajax django

我正在尝试实现我能想到的最简单的AJAX POST,因为我是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()" />

我在view.py中的相关功能是:

def ajax(request):
    if request.method == 'POST':
        return HttpResponse("Hello AJAX")   

    return render_to_response('huh.html', {})

简单,对吧?然而问题是,当我点击我的按钮时,“它应该在附加后发布”已成功添加到div中,但没有其他事情发生,HttpResponse(“Hello AJAX”)未返回,POST不是工作!

我写的内容似乎与我读过的文档一致,但我有一种感觉,我要么错过了一些愚蠢的东西,要么试图过分简化POST。提前谢谢!

3 个答案:

答案 0 :(得分:1)

我不知道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>

这将提醒您写入响应的任何内容(可能是“Hello AJAX”)。

此外,您的脚本中存在错误:您尚未定义“数据”(如data: {'obj':data},中所述)。除非您在其他地方声明data,否则此脚本不会按原样执行。

答案 1 :(得分:0)

这里可能有错误吗?

    success: function(response) 

没有调试信息,我无法告诉你更多信息...... python是否收到请求?也许这是一个问题,它拒绝CSRF验证,你需要添加和导入它:

@csrf_exempt
def myview(request):
    print 'hello'

也许你可以在这里阅读更多相关内容:https://docs.djangoproject.com/en/1.2/releases/1.2.5/#csrf-exception-for-ajax-requests

最初恕我直言,最好不要这么深?

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

$.post('/django/ajax/', data, function(data){
                                 alert(data);
                              });

也许我误解了你的个人代码,但我想你只是在这里找到官方帮助:http://api.jquery.com/jQuery.post/

这有两件好事:

  1. Firebug(Mozilla Firefox和其他一些浏览器也不错)
  2. Django调试工具栏
  3. 它们适合在python和jQuery方面进行调试...尝试学习使用它们...(如果你还没有,我很抱歉在这种情况下告诉你这么明显的事:) )

答案 2 :(得分:0)

我假设你想要一个JSON响应。

jquery document解释了可以使用的不同数据类型。当使用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>

在views.py中尝试此操作:

import json
from django.http import HttpResponse

def ajax(request):
    if request.method == 'POST':
        return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")