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中,当提交表单时,它会阻止默认的
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执行提交时,我可以接收
我写的代码是新的,所以我会考虑适应新的库。这纯粹是为了显示错误或成功消息的UI增强,如果用户禁用了javascript,则不会阻止表单默认操作 - 他们只是看不到成功或错误消息。
我看到的是"Javascript promises"我不介意使用Javascript,如果这在可用性方面更好,因为我不想在提交时冻结浏览器。
谢谢你的时间
你的代码应该是这样的
我会从PHP传回标准形式的成功/错误。 所以失败可能是这样的:
1 |
然后在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); } |
?>