从Ajax调用Django视图

时间:2015-08-07 13:28:49

标签: javascript jquery ajax django django-views

我正在使用Ajax(以及Django)对按钮点击执行某些操作。我成功调用了javascript函数,但我无法调用Django视图。没有错误,但我视图中的print语句不打印...?

urls.py

urlpatterns = patterns('polls.views',
    url(r'^request_access/$', 'request_access',
        name='request_access'),
)

views.py

def request_access(request):
    print("DJANGO VIEW")
    if request.method == "POST":
        print("DATA: ", request.POST.get('request_data'))
        return HttpResponse(
            json.dumps(response_data),
            content_type="application/json"
        )

template.html

<button class="btn btn-green btn-sm" onclick="request_access(this)" id="{{ data }}"><i class="fa fa-plus"></i> Join Group</button>

javascript.js

function request_access($this){
    console.log("button clicked");
    var request_data = $this.id;
    console.log("data: " + request_data);
    $.post({
        url: "request_access/",
        data : { request_data: request_data},
        success : function(json) {
            $("#request-access").hide();
            console.log("requested access complete");
        }
    })
}

3 个答案:

答案 0 :(得分:2)

在代码中将“post”替换为“ajax”,现在print语句将在您的视图中工作。

function request_access($this){
    console.log("button clicked");
    var request_data = $this.id;
    console.log("data: " + request_data);
    $.ajax({
        url: "request_access/",
        data : { request_data: request_data},
        success : function(json) {
            $("#request-access").hide();
            console.log("requested access complete");
        }
    })
}

Difference between $.post and $.ajax?

$.post vs $.ajax

答案 1 :(得分:0)

这将返回空值。

views.py

def request_access(request):
    print("DJANGO VIEW")
    a = request.POST.get('request_data')
    print a
    return HttpResponse(json.dumps(a),content_type="application/json")

JS

function request_access($this){
    console.log("button clicked");
    var request_data = $this.id;
    alert(request_data);
    console.log("data: " + request_data);
    $.ajax({
        type: 'GET',
        url: "/crm/request_access/",
        data : { 'request_data': request_data},
        success : function(json) {
            $("#request-access").hide();
            console.log("requested access complete");
        }
    })
}

答案 2 :(得分:0)

我遇到了同样的问题,即我的视图没有错误,但我的视图没有被调用。 以下是我解决它的方法:

我试图获得以下网址:

  

url(r'users / change_rights','change_user_right',   名称= change_user_right'),

但是users / change_rights网址也匹配了我注册的另一个网址:

  

url(r'users','users_table',name ='users_table'),

所以django只是调用了第一个非ajax视图而没有返回任何错误。

要解决此问题,请在第二个网址的末尾添加“$”,这样它就不会包含用户/ change_rights:

  

url(r'users $','users_table',name ='users_table'),