如何使用没有表单的select标签将数据发送到服务器

时间:2012-09-26 09:18:28

标签: html django jquery

我的html文件中有一个select标签。我想当用户更改他/她的选择时,我的页面必须使用ajax,将用户选择的值发送到我的views.py函数,然后我重新创建具有此值的页面。 我的HTML代码:

<div id="response>
    <select name="page_length_name" id="page_length_id">
        <option id="opt1">10</option>
        <option id="opt2">20</option>
        <option id="opt3">30</option>
        <option id="opt4">40</option>
    </select>
     //here is a table
</div>

(此选择标签不在表格中)。我希望它被修复,直到用户更改数据。所以我想我必须使用cookie。我不知道我可以使用这样的功能,虽然选择不是形式?应该是“POST”方法吗?只能在表格中使用?如果是,那么如何将数据(我的选择标签)发送到服务器?

$(function() {
                $('#page_length_id').change(function() {
                temp = ["page_length_id"].options[selectedIndex].value;
                $.ajax({
                    type: "POST",
                    data: temp,
                    url: 'backup/',
                    success: function(data) {
                        alert("success");
                        $("#response").html(data);
                    }
                });
            })

以及如何强制此选择值在cookie中?仅仅通过views.py?中的这行代码来完成它:

table_length = request.COOKIES.get('table_length')

这是我的viwes.py:

def backup(request):
    if request.is_ajax():
        try:
            table_length = request.COOKIES.get('table_length')
        except Exception:
            table_length = 10
        if not page_length:
            table_length = 10 
        //here i create the page with xsl and send it to a page to be shown 
        result = style.applyStylesheet(doc)
        out = style.saveResultToString( result )
        ok =  mark_safe(out)
        style.freeStylesheet()
        doc.freeDoc()
        result.freeDoc()
        if request.method == 'POST': 
            return HttpResponse(ok)
        else:
            return render_to_response("show.html", {
                'str': ok,
                }, context_instance=RequestContext(request))
谢谢。

1 个答案:

答案 0 :(得分:2)

对于ajax问题,您可以轻松使用

  $.ajax({
    type:"POT",
    url :....,
    data:{
        .......
        'csrfmiddlewaretoken': $("{% csrf_token %}").find("input").attr("value"),
    },    
    dataType:"html",
    error:function(data){},
    success:function(data){
      ....
    },
  });

但你需要把

<input type="hidden" id="csrf_token" value="{{csrf_token}}"/> 
你的HTML中的

如果您使用表单发送数据,则应使用csrf

<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

https://docs.djangoproject.com/en/dev/topics/forms/