如何使用 jQuery/AJAX 访问 views.py 中的变量?

Posted

技术标签:

【中文标题】如何使用 jQuery/AJAX 访问 views.py 中的变量?【英文标题】:How do I access a variable in views.py using jQuery/AJAX? 【发布时间】:2012-11-08 13:08:09 【问题描述】:

编辑

当我编写 print request.POST['video'] 时,即使存在 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试显示“video34”(隐藏字段中的值)。

原创

我正在尝试在 Django 中使用 jQuery/AJAX 发布数据,但遇到了麻烦。如何访问 views.py 中的“视频”变量?当我在 views.py 中编写“打印视频”时,我在控制台中收到错误消息 POST /edit_favorites/ HTTP/1.1" 500 10113。

views.py

from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def edit_favorites(request):
    if request.is_ajax():
        message = "Yes, AJAX!"
    else:
        message = "Not Ajax"
    return HttpResponse(message)

urlconf:

url(r'^edit_favorites/', 'edit_favorites'),

html:

<form method='post' id ='test'>
     <input type="hidden" value="video34" />
    <input type='submit' value='Test button'/>
    
    <div id = 'message'>Initial text</div>
        
</form>

javascript:

<script type="text/javascript">
   $(document).ready(function() 
       $("#test").submit(function(event)
       event.preventDefault();
            $.ajax(
                 type:"POST",
                 url:"/edit_favorites/",
                 data: 
                        'video': $('#test').val() // from form
                        ,
                 success: function()
                     $('#message').html("<h2>Contact Form Submitted!</h2>") 
                    
            );
            return false;
       );
       
    );
</script>

【问题讨论】:

【参考方案1】:

它在request.POST['video'] 中,就像在普通的 POST 中一样。

【讨论】:

当我编写 print request.POST['video'] 时,即使存在 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试让“video34”显示出来。 是的。 #test 指的是表单,表单没有val()。你应该给你的领域一个id 并使用它。请注意,您还应该始终为您的字段提供name,否则您将无法正常提交。 使用 $('#test').serialize() 来查看所有表单数据。就像丹尼尔说的那样,表单没有 val(),所以你什么都不发送【参考方案2】:

在您在控制台POST /edit_favorites/ HTTP/1.1" 500 10113 中收到的消息中,“500”是关键。这意味着您的服务器代码很可能有错误。在这种情况下,您试图“打印”一个不存在的变量。事实上,我很惊讶您在某处看不到 NameError 的回溯。

我不是 Django 用户,所以也许其他人可以提出更好的建议,但根据Django docs,所有帖子参数都在request.POST 中,这是一个类似字典的对象。

我建议检查一下:

if request.method == 'POST':
    if 'video' in request.POST:
        video = request.POST['video']
        # Do stuff, etc...
    else:
        # Raise an error

那是在服务器端。在您的 HTML 中,您还需要为所有表单输入字段命名。例如&lt;input name="video" type="hidden" value="video32" /&gt; 等。您可能希望阅读有关 HTML 表单发布的更多信息。

【讨论】:

当我编写 print request.POST['video'] 时,即使有 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试让“video34”显示出来。 在您的情况下,您的 HTML 还缺少表单输入字段的“名称”属性。

以上是关于如何使用 jQuery/AJAX 访问 views.py 中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery+ajax+jsonp 跨域访问

使用jQuery AJAX请求CodeIgniter从Controller显示数据库中的数据到View而不刷新页面

我如何确定每个访问者正在执行 jquery ajax 调用?

Angular 在 jQuery Ajax 加载页面中不起作用

访问受限 URI 被拒绝代码:1012

jquery + ajax 提交数据报错