Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Django中的AJAX表单提交_Javascript_Jquery_Python 3.x_Django_Ajax - Fatal编程技术网

Javascript Django中的AJAX表单提交

Javascript Django中的AJAX表单提交,javascript,jquery,python-3.x,django,ajax,Javascript,Jquery,Python 3.x,Django,Ajax,在我提交表单的过程中,我不断收到“notajax”作为响应。我必须错过一些小东西,但我看不见 class VideoLikeView(View): def post(self, request): if request.is_ajax(): message = 'Ajax' else: message = 'Not Ajax' return HttpResponse(message) AJA

在我提交表单的过程中,我不断收到“notajax”作为响应。我必须错过一些小东西,但我看不见

class VideoLikeView(View):
    def post(self, request):
        if request.is_ajax():
            message = 'Ajax'
        else:
            message = 'Not Ajax'
        return HttpResponse(message)
AJAX代码如下所示:

$(function () {
  $("#like-form").submit(function (event) {
      $.ajax({
            type: "POST",
            url: form.attr('action'),
            headers: {'X-CSRFToken': '{{ csrf_token }}'},
            data: {'pk': $(this).attr('value')},
            success: function(response) {
                alert('Video liked');
          },
          error: function(rs, e) {
                 alert(rs.responseText);
          }
        }
    });
});
});
和我的HTML:

<form id="like-form" action="{% url 'video-like' %}" method="post">
    {% csrf_token %}
    <input name="like"
           type="hidden"
           value="{{ video.id }}">
    <button type="submit">
        <span class="video-options ml-auto fas fa-heart fa-2x m-2"></span>
    </button>
</form>

{%csrf_令牌%}

还有一个问题要补充;如果不使用
,如何在表单中使用
?我想使用fontawesome图标,但似乎我必须使用一个按钮来获取要提交的表单。

我在互联网上找到了一个似乎可行的答案,但我不明白问题是什么。似乎需要某种类型的序列化(?)。。。不管怎么说,以下是有效的方法:

var frm = $('#like-form');

frm.submit(function () {
    $.ajax({
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: frm.serialize(),
        success: function (data) {
            console.log('success');

        },
        error: function(data) {
            console.log('failed');
        }
    });
    return false;
});

很想听听人们为什么这样做有效,而不是以前的..

尝试更改您的btn类型按钮并为事件单击添加ID: 因为放置submit按钮直接进入view.py,而不需要通过AJAX

<form id="like-form" action="{% url 'video-like' %}" method="post">
{% csrf_token %}
<input name="like"
       type="hidden"
       value="{{ video.id }}" id="id_pk">
<button type="button" id="id_btn">
    <span class="video-options ml-auto fas fa-heart fa-2x m-2"></span>
</button>
还有你的view.py

def post(self, request):
    if 'guardar' in request.POST['accion']:
       print("")

尝试添加头
X-Requested-With
XMLHttpRequest
似乎没有帮助。您可以检查请求头中是否存在头吗?当我
print(request.headers)
我在itOk内部获得
{“Cookie”:“csrftoken=cizmnklwxp7yqussiyzk8zg3tbkq0i0iwklzjd9gfeht3ci4cpk0jwwwjkqnw;”
,从这件事开始,我在周围挖了2个小时才让它开始工作。我会发布答案,但我不明白为什么,所以也许你可以帮我理解。。。
def post(self, request):
    if 'guardar' in request.POST['accion']:
       print("")