如何发送简单的ajax请求?

时间:2014-09-17 17:50:11

标签: javascript jquery python django

帮助请发送ajax-request。

HTML:

<p><a id="test">Hello</a></p>

JS:

$(function() {
  $("#test").click(function() {
    $.ajax({
        url: "/xhr_test/",
        type: 'POST',
        dataType:"html",
        data: {
            "phone": 1,
            "skype": 2,
            "other": 3,
        },
        error: function() {
            alert('Ошибка получения запроса');
        },
        success: function(data) {
            alert('ajax worked' + data);
        }
    }); 
  });
}); 

urls.py:

url(r'^xhr_test/$', 'views.xhr_test', name='xhr_test'), 

views.py:

def xhr_test(request):
    if request.is_ajax():
        message = "Hello AJAX!"
    else:
        message = "Hello"
    return HttpResponse(message)    

我尝试在使用js发送邮件之前检查数据:

问题是,在提交表单后,我收到了消息&#34; error mes&#34;。同时向浏览器控制台输出:POST http:// localhost:8000 / xhr_test / 403(FORBIDDEN)

请帮助修复代码

2 个答案:

答案 0 :(得分:1)

您还需要在请求中发送CSRF令牌。

从您的视图中将csrf令牌传递给将生成您的网页的模板,然后通过csrf调用将ajax令牌传回,以便django将您识别为有效连接。

<强>的Javascript

$(function() {
  $("#test").click(function() {
    $.ajax({
        url: "/xhr_test",
        type: 'POST',
        dataType:"json",
        data: {
            "phone": 1,
            "skype": 2,
            "other": 3,
            "csrfmiddlewaretoken": '{{ csrf_token }}'
        },
        error: function() {
            alert('Ошибка получения запроса');
        },
        success: function(data) {
            alert('ajax worked' + data);
        }
    }); 
  });
}); 

HTML模板

{% csrf_token %}
<p><a id="test">Hello</a></p>

<强> views.py

def xhr_test(request):
    if request.is_ajax():
        phone = request.POST['phone']
    data_to_send = {}
    data_to_send.update({'data':phone})
    return HttpResponse(simplejson.dumps(data_to_send),content_type="application/json") 

答案 1 :(得分:0)

您需要在您的ajax电话中加入csrfmiddlewaretoken

$(function() {
  $("#test").click(function() {
    $.ajax({
        url: "/xhr_test/",
        type: 'POST',
        dataType: "html",
        data: {
            csrfmiddlewaretoken: "{{csrf_token}}",
            phone: 1,
            skype: 2,
            other: 3,
        },
        error: function() {
            alert('Ошибка получения запроса');
        },
        success: function(data) {
            alert('ajax worked' + data);
        }
    }); 
  });
});