Javascript 如何通过ajax更改xhtml2pdf的查询集

Javascript 如何通过ajax更改xhtml2pdf的查询集,javascript,django,ajax,xhtml2pdf,Javascript,Django,Ajax,Xhtml2pdf,我试图建立一个功能,用户可以选择的项目,他希望呈现到pdf。为了做到这一点,我首先编写了一些代码来存储用户选择的项目的主键 (javascript) (html) (HTML) 棘手的部分是,im使用xhtml2pdf渲染成pdf,因此需要重新调用httpresponse,而不是处理ajax的视图所做的典型jsonresponse。因此,im面临405错误,这似乎与cors错误有关 因此,我有两个问题: 如何使用ajax进行查询并将其传递到上下文中 我如何在我的案例中应用这个概念 向ajax函数

我试图建立一个功能,用户可以选择的项目,他希望呈现到pdf。为了做到这一点,我首先编写了一些代码来存储用户选择的项目的主键

(javascript)

(html)

(HTML)

棘手的部分是,im使用xhtml2pdf渲染成pdf,因此需要重新调用httpresponse,而不是处理ajax的视图所做的典型jsonresponse。因此,im面临
405错误
,这似乎与cors错误有关 因此,我有两个问题:

  • 如何使用ajax进行查询并将其传递到上下文中
  • 我如何在我的案例中应用这个概念

  • 向ajax函数返回任何类型的内容都没有错。Javascript不一定需要接收json,它还可以接收其他类型的内容,然后在success函数中处理这些内容。但是,您说您看到了405错误,这意味着您的视图根本没有返回HttpResponse。请从您的django控制台显示错误的完整跟踪(405表示django提出了一个实际的错误)。此外,您的js函数在点击
    时被触发嘿,到目前为止,我成功地解决了问题,我非常接近我的目标,但有一件事让我望而却步,那就是请求是ajax,href是非ajax的。因此,在发送href请求的那一刻,它就会进入else语句,该语句随后呈现了我的错误日志。有没有办法使用ajax来重定向而不是href?正如我在上一篇评论中告诉你的那样,从你的标记中删除href属性,因为它无论如何都不应该被使用(你希望你的javascript被触发)。在用
    onclick
    触发的javascript函数中,添加
    Event.preventDefault()
    ,以防止浏览器实际跟踪
    标记中的任何链接(如果删除
    href
    则不需要,但一般情况下应该这样做)。
    var arr = []
    function selector(clicked_id){
        var a = clicked_id
        if (arr.includes(a) === false){
        arr.push(a)
        document.getElementById(a).classList.add('bg-light');
        } else {
        const index = arr.indexOf(a)
        arr.splice(index, 1)
        document.getElementById(a).classList.remove('bg-light')
        }
        console.log(arr)
        console.log(a)
    
        };
    
            {%for trial in trials %}
        <td style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000" align="center" valign=middle bgcolor="#CCFFFF" id={{trial.trial_id}} onClick="return selector(this.id);"><b><font face="Arial" size=1>
        </td>
        {%endfor%}
    
    function ajaxsender(clicked_id){
    $.ajax({
     url : "{% url 'bom-pdf'%}",  
     method : "POST",
     data : {
       'csrfmiddlewaretoken' : "{{  csrf_token  }}",
        'arr' : arr
              },
     success : function(result) {
        console.log(arr)
        }
    
    })};
    
            {% for product in product %}
        <a {% url 'bom-create' product.formulation_id %} id = {{product.formulation_id}} onClick="return ajaxsender(this.id);" class='btn w3-teal float-right' style="margin-right:3%">Generate BOM PDF</a>
        {% endfor %}
    
    def BomPdf(request):
      if request.method=='POST' and request.is_ajax():
        print('ajax requessssst')
        listy = request.POST.getlist('arr')
        print(type(listy))
        #some code here to be able to filter out my data based on the queryset passed in#
         pk = #
         data = {
             'product' : ProductFormulation.objects.filter(formulation_id = pk)[0],
         }
         pdf = render_to_pdf('rnd/bom_pdf.html', data)
         return HttpResponse(pdf, content_type='application/pdf')