Ajax GET数据返回’无’

这是我的ajaxfunction:

$('a.username').on('click', function() { var username = $(this).html(); var url = window.location.href.split('?')[0]; $.ajax({ type: 'GET', url: url, data: { username_clicked: username, csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val() }, success: function (data) { console.log(data.username_clicked) } }) }); 

和模板:

 

{{ i.author }}

url

 url(r'^raise_profile/', raise_profile, name='raise_profile'), 

并查看:

 def raise_profile(request): if request.method == 'GET': print('get') #prints 'get' username_clicked = request.GET.get('username_clicked') print(username_clicked) #prints 'None' return render(request, 'article.html', {}) 

console.log(data.username_clicked)不记录任何内容。 但是,如果我在模板中https://stackoverflow.com/questions/41820487/ajax-get-data-returning-none/{% url 'raise_profile' %}https://stackoverflow.com/questions/41820487/ajax-get-data-returning-none/{% url 'raise_profile' %} ,那么它会记录正确的数据。 有什么问题是什么原因?

编辑:

视图:

 def article(request, category, id): name = resolve(request.path).kwargs['category'] for a, b in CATEGORY_CHOICES: if b == name: name = a instance = get_object_or_404(Post, id=id, category=name) allauth_login = LoginForm(request.POST or None) allauth_signup = SignupForm(request.POST or None) #comments comment = CommentForm(request.POST or None) ajax_comment = request.POST.get('text') comment_length = len(str(ajax_comment)) comment_list = Comment.objects.filter(destination=id) score = CommentScore.objects.filter(comment=comment_list) if request.is_ajax(): if comment.is_valid(): comment = Comment.objects.create(comment_text=ajax_comment, author=str(request.user), destination=id) comment.save() score = CommentScore.objects.create(comment=comment) score.save() username = str(request.user) return JsonResponse({'text': ajax_comment, 'text_length': comment_length, 'username': username}) else: print(comment.errors) context = { 'score': score, 'comment_list': comment_list, 'comment': comment, 'instance': instance, 'allauth_login': allauth_login, 'allauth_signup': allauth_signup } return render(request, 'article.html', context) def raise_profile(request): username_clicked = request.GET.get('username_clicked') print(username_clicked) if request.is_ajax(): profile = Profile.objects.get(username=username_clicked) print('Age:', profile.age) return HttpResponse() 

url:

 url(r'^(?P\w+)/(?P\d+)/', article, name='article'), #original view url(r'^raise_profile/', raise_profile, name='raise_profile'), 

Edit2:要将数据发送回模板我试过这些:

 def raise_profile(request): username_clicked = request.GET.get('username_clicked') if request.is_ajax(): profile = Profile.objects.get(username=username_clicked) print('Age:', profile.age) profileAge = profile.age response_data = json.dumps({'profile_age': profileAge}) return HttpResponse(response_data, content_type='application/json') 

 def raise_profile(request): username_clicked = request.GET.get('username_clicked') if request.is_ajax(): profile = Profile.objects.get(username=username_clicked) print('Age:', profile.age) profileAge = profile.age return JsonResponse('profileAge': profileAge) 

base.html文件

 

{{ profileAge }}

没有任何表现。 但是当我在视图中打印profileAge时它返回4 。 知道为什么没有将数据发送到我的模板吗?

这是因为当您点击带有url的href元素为{%url’raise_profile’%}时 ,窗口的位置会更改为www.example.com/raise_profile/,并且在此行中:

 var url = window.location.href.split('?')[0]; 

你是在跟随url吗? 现在不存在于窗口位置URL中。 因此,如果您希望将此数据发送到raise_profileurl,则只需按原样更新:

 $('a.username').on('click', function() { var username = $(this).html(); var url = "/raise_profile/"; $.ajax({ type: 'GET', url: url, data: { username_clicked: username, csrfmiddlewaretoken: $("input[name='csrfmiddlewaretoken']").val() }, success: function (data) { console.log(data.username_clicked) } }) });