javascript - 为什么这个 AJAX 表单没有提交?

标签 javascript php jquery ajax forms

每当我按下表单中的“提交请求”按钮时,不会弹出任何错误,也不会将我重定向到 PHP 脚本中注明的页面。关于为什么会发生这种情况的任何想法?

来自带有表单的网页的代码:

<form id="consultation-reservation" action="actions/consultation-request.php" method="post">
  <input name="fullname" type="text" placeholder="Full Name (Required)" class="mt5" />
  <input name="phonenumber" type="text" placeholder="Phone Number (Required)" class="mt5" />
  <input name="emailaddress" type="text" placeholder="E-Mail Address (Required)" class="mt5" /> 
  <textarea name="comments" placeholder="Additional Comments/Questions" class="mt10"></textarea>  
  <p class="hidden" id="consultation-reservation-error">Please verify all required fields are complete.</p>  
  <a class="button" id="consultation-reservation-submit">Submit Request</a>
</form>

<script type="text/javascript">
$(document).ready(function(){                                               
    $("#consultation-reservation-submit").click(function(){
        $("#consultation-reservation").submit();
    });
});

$('#consultation-reservation').submit(function(e) {
    register();
    e.preventDefault();
});

function register()
{               
    jQuery.ajax({
        method: "POST",
        url: "actions/consultation-request.php",
        data: $('#consultation-reservation').serialize(),
        dataType: "json",
        success: function(msg){

        if(parseInt(msg.status)==1)
        {
          window.location=msg.txt;
        }
        else if(parseInt(msg.status)==0)
        {
            error(1,msg.txt);
        }
        }
    });

}               

function hideshow(el,act)
{
    if(act) $('#'+el).hide(0).slideDown(500, 'linear');
    else $('#'+el).hide();
}   

function error(act,txt)
{
    if(txt) $('#consultation-reservation-error').html(txt);
    $('#consultation-reservation-error').hide(0).slideDown(500, 'linear');
}       
</script>

应该通过 ajax 执行的 PHP 脚本:(我打算将 mysql_real_escape_string 应用于包含表单数据的变量,但还没有)

<?php

if(empty($_POST['fullname']) || empty($_POST['phonenumber']) || empty($_POST['emailaddress']))
{
    die('{status:0,"txt":"Please verify all required fields are complete."}');
}

$name = $_POST['fullname'];
$phonenumber = $_POST['phonenumber'];
$email = $_POST['emailaddress'];
$comments = $_POST['comments'];


if(!(preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['emailaddress'])))
    die('{status:0,"txt":"Please Provide a Valid E-Mail Address."}');

echo '{status:1,txt:"consultation-request-successful"}';

?>

最佳答案

echo '{status:1,txt:"consultation-request-successful"}';

上面是无效的 JSON,因为它没有在 txtstatus 键周围使用双引号。您将响应数据类型指定为 json,因此 jQuery 将尝试将响应解析为 JSON,如果失败,它将运行错误处理程序(如果已设置)而不是成功处理程序。

因此要么添加双引号,要么以其他方式构建 JSON:

$response = array('status' => 1, 'txt' => 'consultation-request-successful');
echo json_encode($response);

以这种方式构建 JSON 要好得多,因为所有引号都会自动处理,值中的特殊字符也会根据需要进行转义。

关于javascript - 为什么这个 AJAX 表单没有提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24453997/

相关文章:

javascript - 使用相同功能时,Mouseleave 会覆盖点击

javascript - Javascript 中的表单填写不起作用?

javascript - 通过 JQuery 将 img 的位置动态更改为鼠标位置

php - mysqli_error 和 mysqli_stmt_error 的区别

javascript - AngularJS - 指令包装而不丢失与 Controller 的连接

php - 如何从数据库查询(PHP)向多个收件人发送电子邮件

php - 带有 Analytics 的页面计数器,其中数据存储在 MySQL 数据库中

javascript - Jquery simplyScroll 鼠标悬停在 div 上的可见控件

javascript - 是否可以获得 node.js 正在服务的当前请求?

PHP 或 JavaScript : Flip order of text rows (not MySQL)