关于php:Ajax提交表单,并检索成功/错误

Ajax to submit form, and retrieve success/error

我正在使用Ajax和Ajax将表单提交给PHP脚本。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$("#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");
        }  
    });
});

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

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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传回标准形式的成功/错误。 所以失败可能是这样的:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.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");
    }  
});


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

1
2
3
4
5
6
7
8
9
10
<?php
    // ...
    try{
       // your code
       $msg = 'Success';
       return json_encode($msg);
    }catch(Exception $e){
       $msg = 'Error';
       return json_encode($msg);          
    }

?>