代码之家  ›  专栏  ›  技术社区  ›  eozzy

$.post不提交数据

  •  0
  • eozzy  · 技术社区  · 14 年前
    $("#contact-us-form").submit(function () {
    
        var nameVal = $("input[name=name]").val();
        var companyVal = $("input[name=company]").val();
        var titleVal = $("input[name=title]").val();
        var emailVal = $("input[name=email]").val();
        var phoneVal = $("input[name=phone]").val();
        var messageVal = $("input[name=message]").val();
    
        alert(nameVal);
        alert(emailVal);
    
        $.post("/mailer.php", {
            name: nameVal,
            company: companyVal,
            title: titleVal,
            email: emailVal,
            phone: phoneVal,
            message: messageVal
        }, function (data) {
            alert("Data Loaded: " + data);
            $('#thanks').show();
        });
    });
    

    根目录中的mailer.php,它包含:

    <?php
    
    if(isset($_POST['submit'])) {
    
        $to = "myemail@domain.com";
        $subject = "Inquiry";
        $name = $_POST['name'];
        $company = $_POST['company'];
        $title = $_POST['title'];
        $email = $_POST['email'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];
    
        $body = <<<HEREDOC
            From: $name
            Company: $company
            Title: $title 
            E-Mail: $email
            Phone: $phone \n
            Message: $message 
    HEREDOC;
    
        mail($to, $subject, $body);
    
    }
    
    ?>
    

    name email 具有正确数据的警报,但数据警报为空,仅显示 Data Loaded: ,所以我猜数据没有正确提交。

    我该怎么修?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Yahel    14 年前

    “data”回调是您要发布到的表单的响应。因此,它的内容取决于mailer.php应该用什么来响应。


    编辑: mailer.php中没有“echo/print”,因此您无法知道邮件是否成功。除了不清理内容或检查有效的电子邮件地址之外,您还应该在结尾处回显一个基本的成功消息或真或假消息,以便告诉JavaScript该怎么做。

    所以,有点像

    $result = mail($to, $subject, $body);
    if($result)
    echo 'success';
    

    然后,在js回调中

    if(data=="success")
    {
    $('#thanks').show();
    }
    else{
    $('#error').show();
    

    isset() 每次都要检查。

        2
  •  0
  •   eozzy    14 年前

    刚刚添加 return false; 而且成功了!:)

        3
  •  0
  •   Peter Ajtai    14 年前

    mailer.php 没有任何反应。好像是在发邮件,所以这就是为什么 data post callback does fire显示数据已发送到 mailer.php文件 .

    可以使用回调的第二个参数检查:

    , function (data, textStatus) {
            alert("Data Loaded: " + textStatus);
            $('#thanks').show();
    

    arguments 数组:

    , function () {
            alert("Data Loaded: " + arguments[1]);
            $('#thanks').show();
    

    如果你愿意 数据 若要实际包含某些内容,则可以输出 subject mailer.php文件 比如:

    ...
    echo $subject;
    mail($to, $subject, $body);
    

    alert(data) 应该有用。


    $("#contact-us-form").submit(function (event) {
        event.preventDefault();
        ...