0

我的 html 文件中有一个选择标签。我希望当用户更改他/她的选择时,我必须使用 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”方法吗?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))

谢谢你。

4

1 回答 1

3

对于 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/

于 2012-09-26T11:00:33.587 回答