【问题标题】:AJAX multipart form never calls success functionAJAX 多部分表单从不调用成功函数
【发布时间】:2018-05-24 06:14:33
【问题描述】:

我使用 ajax 提交了一个多部分表单,它从不调用成功函数(尽管表单提交确实成功),它总是重定向到表单的 php 页面。

这是我的代码:

 $('#pre-register-contact-form').on('submit', function (e) {
    if (!e.isDefaultPrevented()) {
        var url = "preregisterform.php";
        $.ajax({
            type: "POST",
            url: url,
            contentType: false,
            data: new FormData($(this)),
            processData: false,
            success: function (data)
            {
                    // Never reaches here!
                var messageAlert = 'alert-' + data.type;
                var messageText = data.message;
                var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';
                if (messageAlert && messageText) {
                    $('#pre-register-contact-form').find('.messages').html(alertBox);
                    $('#pre-register-contact-form')[0].reset();
                    grecaptcha.reset();
                }
            },
            error: function(error) {
                alert(error);
            }
        });
        return false;
    }
});

但是,如果我不以多部分方式提交表单,使用下面的代码,它会调用成功函数:

$('#pre-register-contact-form').on('submit', function (e) {
        if (!e.isDefaultPrevented()) {
            var url = "preregisterform.php";

            $.ajax({
                type: "POST",
                url: url,
                data: $(this).serialize(),
                success: function (data)
                {
                    var messageAlert = 'alert-' + data.type;
                    var messageText = data.message;

                    var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';
                    if (messageAlert && messageText) {
                        $('#pre-register-contact-form').find('.messages').html(alertBox);
                        $('#pre-register-contact-form')[0].reset();
                        grecaptcha.reset();
                    }
                }
            });
            return false;
        }
    });

我该如何解决这个问题?

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

我需要将 $(this) 更改为 this 然后它工作了

【讨论】:

  • 而这正是我提到的帖子中提到的内容this$(this)[0] 是相同的,但不是 $(this) :) 如果你将你的 this 更改为 $(this)[0] 它仍然可以工作,很高兴你修复它干杯
  • @MuhammadOmerAslam 应该发布那个答案而不是标记我的帖子
  • 我们不应该复制/粘贴一个类似或重复的已经有答案的问题,这样其他有相同问题的人就会被重定向到这里已经经历了这么多专家的实际答案,并且答案上的 cmets 也可以帮助您,不要消极对待,我也不是要劝阻您,但这实际上是向您建议的解决方案。希望不要有什么难受的感觉,毕竟我你和其他成员都是来互相帮助的。
  • @MuhammadOmerAslam 谢谢,如果您发表您的第一条评论作为答案,我会为您接受 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2013-03-25
  • 1970-01-01
  • 2013-01-13
  • 2013-08-04
  • 2015-10-16
相关资源
最近更新 更多