【问题标题】:Ajax does not work, instead starts default method and actionAjax 不起作用,而是启动默认方法和操作
【发布时间】:2021-11-21 07:53:32
【问题描述】:

所以我的问题是 ajax(或其他东西)不适用于表单,最奇怪的是有一种表单可以完美地与 AJAX 一起使用。我已经尝试了很多东西:将input 更改为button 并使用"submit" to "button" 的类型,尝试使用jQuery .post().get() 中的另一种方法,尝试使用xmlHttpRequest。我现在很困惑。也许你能看到我看不到的东西。谢谢

编辑:所以,我对其进行了一些修改,并在控制台中出现了这个错误(现在那里没有任何错误)。 Error

HTML格式

<form action="./contactAction.php" method="POST" class="contact_form" id="cform"name="contactForm">
        <input type="text" name="contactFname" placeholder="Prenumele" />
        <input type="text" name="contactLname" placeholder="Numele" />
        <input type="text" name="contactEmail" placeholder="Emailul tau" />
        <textarea name="contactSubject" placeholder="Scrie mesajul tau" style="height: 200px"></textarea>
        <button type="submit" name="contactBtn">Submit</button>
      </form>

JS

$(document).ready(function () {
$("#contactBtn").click(() => {
    contactFormValidation();
});

});

function contactRequest() {
let fname = $("#contactFname");
let lname = $("#contactLname");
let email = $("#contactEmail");
let subj = $("#contactSubject");

$.ajax({
    type: "POST",
    url: "../../contactAction.php",
    data: ({"constactFname": fname, "contactLname": lname, "contactEmail": email, "contactSubject": subj}),
    dataType: "html",
    success: (response) => {
        alert("Request success");
        //$("#loginPage").html(response);
    },
    error: () => {
        alert("Error :(");
    }
});
return false;

}

function contactFormValidation() {
let $form2 = $("#contactForm");
$form2.validate({
    wrapper: "div",
    debug: false,
    rules: {
        contactFname: {
            required: true
        },
        contactLname: {
            required: true
        },
        contactEmail: {
            required: true,
            email: true
        },
        contactSubject: {
            required: true
        }
    },
    submitHandler: () => {
        alert("Submit calledd");
        contactRequest();
    }
});

}

【问题讨论】:

    标签: jquery ajax form-submit


    【解决方案1】:

    您的代码中有一些语法错误。

    1. 您的选择器无效。

    从外观上看,您正在尝试根据name 属性获取值。为此,您需要专门针对它的选择器语法。

    1. 使用您当前的逻辑,您也永远不会真正获取输入字段的值。你只是持有对元素的引用。您需要访问输入字段的值才能检索它。

    2. 您没有使用有效的变量声明。您需要使用varletconst 来指定变量声明。

    以正确方式获取值的示例是:

    const fname   = $('input[name="contactFname"]').val();
    const lname   = $('input[name="contactLname"]').val();
    const email   = $('input[name="contactEmail"]').val();
    const subject = $('input[name="contactSubject"]').val();
    

    另一种方法是使用 jQuery 中的 serialize() 方法。更多关于 here.

    【讨论】:

    • 非常感谢。这就是问题所在。缺少.val()name 属性的语法错误。
    【解决方案2】:

    你可以试试这个方法。

        <form action="./contactAction.php" method="POST" class="contact_form" id="cform" name="contactForm">
            <input type="text" id="contactFname" placeholder="Prenumele" />
            <input type="text" id="contactLname" placeholder="Numele" />
            <input type="text" id="contactEmail" placeholder="Emailul tau" />
            <textarea name="contactSubject" placeholder="Scrie mesajul tau" style="height: 200px"></textarea>
            <button type="submit" name="contactBtn">Submit</button>
        </form>
        <div id="contactPage">Hello</div>
    

    Javascript

    <script>
        $('#cform').submit(function() {
          contactFormValidation();
          return false;
        });
        
        function contactRequest() {
        fname = $("#contactFname").val();
        lname = $("#contactLname").val();
        email = $("#contactEmail").val();
        subj  = $("#contactSubject").val();
        $.ajax({
            type: "POST",
            url: "../../contactAction.php",
            data: {contactFname: fname, contactLname: lname, contactEmail: email, contactSubject: subj},
            dataType: "html",
            success: function (response) {
                $("#contactPage").html(response);
            }
        });
        return false;
        }
        
        function contactFormValidation() {
            $('#contactFname').attr('required',true);
            $('#contactLname').attr('required',true);
            $('#contactEmail').attr('required',true);
            return false;
        }
    </script>
    

    【讨论】:

    • 您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的更多信息来改进。
    • 您的回答也是正确的,因为您在此处添加了 .val() 但我之前没有注意到。
    • 感谢您告诉我 - Tyler2P。
    • 很高兴看到您的问题已解决 Virgiliu ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多