【问题标题】:jQuery Ajax request not reaching PHP scriptjQuery Ajax 请求未到达 PHP 脚本
【发布时间】:2023-04-11 05:50:01
【问题描述】:

我正在尝试创建一个具有 javascript 验证的邮件表单。表单值应使用 ajax 发送到 php 脚本,该脚本将数据通过电子邮件发送到电子邮件地址。

但是,php 代码、成功或错误 jquery 回调都不会被调用,chrome 的 javascript 控制台中也没有任何日志。

这是我的简化 html 页面:

<form id="mail-form">
    <div class="input-row">
    <div class="label"><label for="name">Your name: *</label></div>
    <div class="input"><input type="text" name="name" id="name" maxlength="50"/></div>
        <input id="submit-button" type="submit" value="send"/>
</form>

我的javascript:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function (e) {
        e.preventDefault();
        send(form);
    }
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        succes: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}

和我的简化 php 文件:

$myemail = "someone@something.com";
$subject = "test";

$message = $_POST["message"];

mail($myemail, $subject, $message);

echo "ok";

有人能指出我做错了什么吗?我也尝试过简单的 get 方法,但它们也无法到达服务器。

【问题讨论】:

  • 我不知道这是否会在从 IDE 到堆栈的转换过程中丢失,但 success 是这样拼写的,$.ajax 预计也是这样。
  • 您通过 jQuery 提交的调用中似乎有一个额外的括号
  • 追踪此类(错误语法)的方法是使用浏览器的 Javascript 调试器 - Chrome 有一个特别好的调试器。页面一加载你就会看到你的JS是无效的,这确实可以加快调试速度。
  • 我在忙的时候检查了控制台,但它完全是空的。没有显示语法错误。

标签: php jquery ajax post


【解决方案1】:

为你的 JavaScript 试试这个; success 错了,你的submit() 调用中有一个毫无意义的括号:

$(document).ready(function () {
    var form = $("#mail-form");
    form.submit(function (e) {
        send(form);
        e.preventDefault();
        return(false);
    });
});
function send(form) {
    var formData = {
        name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };
    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function(data){
            onSucces();
        },
        error: function(){
            onError();
        }
    });
}

【讨论】:

  • 你是对的!输入错误的成功....无用的括号也是由复制粘贴引起的;)。我在那里检查了表单是否有效,然后它应该调用发送函数。括号来自 if 语句。
【解决方案2】:

您永远不应该依赖客户端的数据验证。

对于您的问题,请使用 alert 确认没有执行成功或错误回调函数。您还可以删除 dataType 以查看是否有任何不同。

你也可以这样做

var formData = form.serialize();

而不是这个

var formData = { name: $("#name").val(),
    email: $("#email").val(),
    phone: $("#phone").val(),
    message: $("#message").val(),
};

【讨论】:

  • 感谢您的提示!我还要添加服务器端验证。
【解决方案3】:

像这样尝试:

改变:

$(document).ready(function () {
    var form = $("#mail-form");

    form.submit(function () {
        e.preventDefault();
        send(form);
        }
    });
});

到:

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

所以它看起来像这样:

$("#mail-form").submit(function (e) {
        e.preventDefault();
        send(form);
});

function send(form) {

    var formData = { name: $("#name").val(),
        email: $("#email").val(),
        phone: $("#phone").val(),
        message: $("#message").val(),
    };

    $.ajax({
        type: "POST",
        url: "/scripts/mailer.php",
        datatype: "text",
        data: formData,
        success: function (data) {
            onSucces();
        },
        error: function () {
            onError();
        }
    });
}

【讨论】:

  • 正是我做错了什么,错误地输入了成功......我现在觉得有点愚蠢。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-02-26
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多