使用ajax post / get调用将当前表单数据发送到函数

时间:2015-05-26 23:57:40

标签: javascript jquery python ajax django

我试图通过将页面发送到Django中的函数来浏览每页的结果数量。根据我的理解,最好的方法是使用AJAX GET或POST调用,但我似乎无法让它工作。

我的myFunction文件中有一个名为views.py的函数,我希望每页传递一定数量的结果,以便管理页面之间的分页。这是我的代码:

在我的javascript文件中:

function navigate_pages() {
    $.ajax({
        url: 'autotester/myFunction',
        type: 'GET',
        data: num_results,
        success: function(data){} // I think this is legal to say
    });
}

在我的HTML中:

{% if page.has_previous %}
    <a href="?page={{ page.previous_page_number }} onclick="navigate_pages()">prev</a>
{% endif %}

{{ page.number }} of {{ page.paginator.num_pages }}

{% if page.has_next %}
    <a href="?page={{ page.next_page_number }}" onclick="navigate_pages()">next</a>
{% endif %}

views.py

def myFunction(request):
    if request.method == 'POST':
        num_results = int(request.POST.get('num_results'))
        paginator = Paginator(tuple_table, num_results)
        print "\n\POST: " + str(request.POST) + "\n\n"
    else:
        num_results = int(request.GET.get('num_results'))
        paginator = Paginator(tuple_table, 10)
        print "\n\GET: " + str(request.GET) + "\n\n"

其中tuple_table是一个字典的元组表示,它包含我正在分页的对象。是什么让我认为它不起作用的是当我打印request.GET时,我没有看到我认为我通过我的ajax调用传递的num_results参数。另外,我在尝试使用NoneType时遇到错误(因为没有num_results参数)。我觉得Django和jQuery / Ajax应该让这个过程变得相对简单,但是我对JavaScript的完全缺乏经验使得这对我来说非常困难。

如果有人能够指出我出错的地方,或者链接到更优雅或正确的解决方案,那将非常感激。

1 个答案:

答案 0 :(得分:0)

错误确实存在于javascript中,你应该传递一组键值对而不是一个值。

此外,您不希望将其放在超链接元素上,因为单击超链接元素a将触发新网址上的页面重新加载,在您的情况下为"?page={{ page.next_page_number }}"

您可能希望将其放在按钮元素上并传递ajax调用中的值:

{% if page.has_previous %}
    <button onclick="navigate_pages( {{ page.previous_page_number }})">prev</button>
{% endif %}

{{ page.number }} of {{ page.paginator.num_pages }}

{% if page.has_next %}
    <button  onclick="navigate_pages({{ page.next_page_number }})">next</button>
{% endif %}

正确的版本应为:

function navigate_pages(page_number) {
    num_results=5;
    $.ajax({
        url: '/myFunction',
        type: 'GET',
        data: {
               "num_results":num_results,
               "page_num":page_number
              },
        success: function(data){} // I think this is legal to say
    });
}

Working example code