繁体   English   中英

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

[英]Using ajax post/get call to send current form data to a function

当我浏览页面时,我试图通过将它们发送到Django中的函数来跟踪每页结果的数量。 据我了解,执行此操作的最佳方法是使用AJAX GET或POST调用,但我似乎无法使其正常运行。

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

在我的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得到的num_results我没有看到我以为我通过ajax调用传入的num_results参数。 另外,由于没有使用num_results参数,我在尝试使用NoneType错误。 我觉得Django和jQuery / Ajax应该使此过程相对简单,但是我对JavaScript的完全缺乏经验使这对我来说极为困难。

如果有人可以指出我要去哪里,或者可以链接到更优雅或更正确的解决方案,将不胜感激。

错误确实在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
    });
}

工作示例代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM