AJAX调用python函数不是从Django的JavaScript函数发生的

时间:2014-07-22 08:47:47

标签: javascript jquery python ajax django

这是一个完整的流程,这里必须小心。我在Django / Python / Web Development中编码。

我有一个html页面,它有一个虚拟按钮,触发了我现在想要执行的所有功能。我想要一个uploadFunction()来执行相同的操作,而不是虚拟按钮。我用Google搜索并发现最好的方法是使用AJAX,因为要执行的操作需要命中服务器。

这是我在jsfunctions.js文件中的uploadFunction()

    function upload() {
   //does some upload      
    alert('before dummy')
    ajaxCallFunction();
}

我正在调用ajaxCallFunction(),我在另一个单独的文件ajax.js中调用了它。 ajaxCallFunction()如下:

 $(document).ready(function(){
   function ajaxCallFunction(){
    alert('right before ajax call')
     $.ajax({
        type: "POST",
        url: "/dummy/{{ frame.slug }}/",
        alert('AJAX CALL');
        data: {
        'snapshot' : $('#snapshot').val(),
        },
        success: dummy,
        dataType: 'html'
        alert('just finished')
        }
        headers:{
            'X-CSRFToken':csrftoken
        }
    });
}
});    

function dummySuccess(data, textStatus, jqXHR)
{
    $('#dummySuccess').html(data)
}

我希望我的upload()调用ajaxCallFunction()并将其重定向到views.py中的方法(我已在我的urls.py中映射)。但是,我的代码根本没有点击ajaxCallFunction。(我看不到我在ajaxCallFunction中添加的警报)。在我的呼叫页面中,我包含了所有这些内容。

<script language="javascript" type="text/css"> </script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>        
<script language="javascript" src ="/static/js/jsfunctions.js"></script>
<script language="javascript" src ="/static/js/ajax.js"></script>

我的ajax.js中有一个获取CSRF Token的函数(因为这是一个post方法)。我在这里错过了什么吗?我还需要做些什么来进行这个ajax调用?请帮忙。在此先感谢:)

1 个答案:

答案 0 :(得分:1)

在JavaScript中,加载.js文件的顺序很重要。 您是否尝试在ajax.js之前加载jsfunctions.js

基本上,当您的浏览器中加载了jsfunctions.js时,如果后者尚未加载,则ajax.js中的函数为undefined

另外,请确保ajax调用中的'csrfmiddlewaretoken'中存在名为data的字段。从可维护性的角度来看,不是直接处理数据,而是将其保存在表单中,然后在将其发送到后端时将其序列化。像这样:

<form id="my-form" method="POST" action="/dummy/{{ frame.slug }}/">
    {% csrf_token %}
    <input name="whatever" value="your_data_goes_here" />
</form>

然后在你的ajax电话中:

var form = $('#my-form');
$.ajax({
    type: form.attr('method'),
    url: form.attr('action'),
    data: form.serialize(),
    success: function() {
        alert("Huzzah!");
    },
    error: function() {
        alert("Oh no!");
    }
});

最后在您的views.py中,您可以处理您的数据:

if "whatever" in request.POST:
    my_data = request.POST.get("whatever")