【问题标题】:Ajax to submit form, and retrieve success/errorAjax 提交表单,并检索成功/错误
【发布时间】:2016-08-25 19:25:40
【问题描述】:

我正在使用带有 Ajax 的 jQuery 向 PHP 脚本提交表单。

用户将输入他们的详细信息,单击提交按钮,PHP 脚本将运行,并且将执行所需的操作或失败。

此时我想根据错误类型显示成功或错误消息。

<script>
$( "#contact-form" ).submit(function(event) {
    event.preventDefault();
    $.ajax({
        url: "includes/contact-us.php",
        type: "post",
        data: $("#contact-form").serialize(),
        success:function(data) {
         alert(data);
        },
        error:function(){
            alert("failure");
        }   
    }); 
});
</script>

所以在我上面的 jQuery 中,当表单提交时,它会阻止默认的action="path to script.php" 然后执行提交。我已经这样做了,以防用户禁用了 Javascript,所以至少基本功能会在那里。

PHP

<?php                  
    if(isset($_POST['contact']) && !empty($_POST['contact'])){

            $link = new mysqli("example", "example", "example", "example");

            if($link->connect_errno > 0) {
                die('Unable to connect to database [' . $link->connect_error . ']');
            }

            $name = $_POST['name'];
            $email = $_POST['email'];
            $website = $_POST['website'];
            $subject = $_POST['subject'];
            $message = $_POST['message'];

            $stmt = $link->prepare("INSERT INTO contact (name, email, website, subject, message) VALUES (?, ?, ?, ?, ?)");
            $stmt->bind_param("sssss", $name, $email, $website, $subject, $message);

            if($stmt->execute()){

                $rtn = "Success";

                echo json_encode($rtn);

                } else {

                $rtn = "Failed";

                echo json_encode($rtn);

            }                              
            $stmt->close();
            $link->close();
}

但是,在此示例中,警告框显示为空。 firebug 或 Apache 日志中没有错误。

是否有可能:当我使用 Ajax 执行提交时,我可以收到 echo "Text from error or success box";,然后我可以将其放入引导警报中?

我正在编写的代码是新的,因此我会考虑适应新的库。这纯粹是为了增强 UI 以显示错误或成功消息,如果用户禁用了 javascript,则不会阻止表单默认操作 - 他们只是不会看到成功或错误消息。

我看到的是"Javascript promises",如果在可用性方面更好的话,我不介意使用 Javascript,因为我不想在提交时冻结浏览器。

感谢您的宝贵时间

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    你的代码应该是这样的

    我会从 PHP 传回标准形式的成功/错误。所以失败可能是这样的:

    json_encode(['success'=>false]);
    

    然后在 Javascript 中对此进行操作将如下所示:

    $.ajax({
        url: "includes/contact-us.php",
        type: "post",
        data: $("#contact-form").serialize(),
        success:function(data) {
            data = JSON.parse(data);
    
            if (data.success)
                alert('success!');
            else
                alert('got failure response from PHP');
        },
        error:function(){
            alert("failure");
        }   
    }); 
    

    【讨论】:

    • 我明白了,这就是我要找的。唯一的问题是,关于“data = JSON.parse(data);”我在萤火虫中收到一个错误,显示为“SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列的数据意外结束”
    • 那么它一定是PHP出错了。如果您有旧版本的 PHP,则需要使用以下术语:array("success"=>true);如果还是有问题,解析前后的console.log(data)并贴在这里。
    • 最后搞定了,用 google recaptcha 元素稍作调整。感谢您的宝贵时间!
    【解决方案2】:

    你可以在php中使用try catch()

    <?php
        // ...
        try{
           // your code
           $msg = 'Success';
           return json_encode($msg);
        }catch(Exception $e){
           $msg = 'Error';
           return json_encode($msg);           
        }
    

    ?>

    【讨论】:

    • 在我的 PHP 中,我有一个 if() 语句来查看插入是否发生,但是即使由于我的 apache 错误日志中有错误而没有成功,Ajax 回调仍然存在成功的。我该如何解决?
    • 如果你的ajax可以向php文件发送请求,他总是返回成功,所以你需要验证你的php文件中的错误并根据请求状态返回消息,你可以把代码php在这里?
    • Pastebin 对于成功/错误消息,我知道我必须进行 json_encode。但是,如何让 Ajax 调用从 PHP 脚本的回显中确定是成功还是错误?
    • 成功或错误的函数,只是ajax是否完成请求,所以如果有错误,你需要从php发送响应,所以你做一个“if”或a尝试捕获这个,并在你的 ajax 的成功函数中获取返回值,谁会收到你的错误或成功消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多