Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery ajax向php传递数据时出现的问题_Php_Jquery_Ajax_Forms_Validation - Fatal编程技术网

使用jquery ajax向php传递数据时出现的问题

使用jquery ajax向php传递数据时出现的问题,php,jquery,ajax,forms,validation,Php,Jquery,Ajax,Forms,Validation,我有一个html表单,应该通过jQueryAjax将数据提交到php文件。代码如下所示。我遇到的问题是,单击submit时,ajax似乎没有向php传递数据,因为done()函数下的console.log返回一个$data对象,显示所有字段都是空的(即当字段为空时返回错误消息)。我根本不明白问题出在哪里。当我在不使用ajax的情况下提交表单,即禁用整个$('form').submit(…)块时,成功消息返回true。ajax块总是返回false <form id="sds_contact_

我有一个html表单,应该通过jQueryAjax将数据提交到php文件。代码如下所示。我遇到的问题是,单击submit时,ajax似乎没有向php传递数据,因为done()函数下的console.log返回一个$data对象,显示所有字段都是空的(即当字段为空时返回错误消息)。我根本不明白问题出在哪里。当我在不使用ajax的情况下提交表单,即禁用整个$('form').submit(…)块时,成功消息返回true。ajax块总是返回false

<form id="sds_contact_form" class="sds_form" action="form_submit.php" method="post">
                    <!-- name -->
                    <div class="sds_input_group sds_half_field">
                        <label for="sds_sender_name">full name*</label>
                        <input id="sds_sender_name" name="sds_customer" type="text" placeholder="eg John smith" required />
                        <span id="sds_customername_error" class="sds_error_span"></span>
                    </div>
                    <!-- email address -->
                    <div class="sds_input_group sds_half_field">
                        <label for="sds_sender_email">email*</label>
                        <input id="sds_sender_email" name="sds_form_email" type="email" placeholder="eg j.smith@example.com" required />
                        <span id="sds_email_error" class="sds_error_span"></span>
                    </div>
                    <!-- subject -->
                    <div class="sds_input_group">
                        <label for="sds_email_subject">subject*</label>
                        <input id="sds_email_subject" name="sds_form_subject" type="text" placeholder="e.g need an app designed" required />
                        <span id="sds_subject_error" class="sds_error_span"></span>
                    </div>
                    <!--enquiry -->
                    <div class="sds_input_group">
                        <label for="sds_sender_enquiry">enquiry*</label>
                        <span id="sds_enquiry_error" class="sds_error_span"></span>
                        <textarea id="sds_sender_enquiry" name="sds_form_enquiry" placeholder="enter details here" rows="15" required></textarea>
                    </div>
                    <!-- submit button -->
                    <button  name="sds_submit_enquiry" type="submit" class="sds_form_button sds_button">send</button>
                </form> 
这是表单_submit.PHP中的PHP代码

<?php

$data = array();
$errors = array();

//get form data
$customer_name = $_POST['sds_customer'];
$customer_email = $_POST['sds_form_email'];
$email_subject = $_POST['sds_form_subject'];
$enquiry = $_POST['sds_form_enquiry'];  

//validate name
if(empty($customer_name)){
    $errors['customer_name'] = 'name is required';
}

//validate email
if(empty($customer_email)){
    $errors['customer_email'] = 'email is required';
}else{
    if(!filter_var($customer_email,FILTER_VALIDATE_EMAIL)){
        $errors['customer_email'] = 'email provided is invalid';
    }
    $customer_email = filter_var($customer_email,FILTER_SANITIZE_EMAIL);
}

//validate form subject
if(empty($email_subject)){
    $errors['email_subject'] = 'subject is required';
}else{
    $email_subject = filter_var($email_subject,FILTER_SANITIZE_STRING);
}

//validate form comments
if(empty($enquiry)){
    $errors['enquiry'] = 'please enter your enquiry';
}else{
    $enquiry = filter_var($enquiry,FILTER_SANITIZE_STRING);
}



if(!empty($errors)){
    $data['success'] = false;
    $data['errors'] = $errors;
}else{
    $data['success'] = true;
    $data['message'] = "Your email has been sucessfully sent. Thank you for your enquiry. Exepect a response soon!";

    //further data processing here....


}
echo json_encode($data);

在php文件中,取消序列化数据

unserialize($data); 

您的问题是关于jquery中的参数名称。该参数定义为:

var form_data = {
    'customer_name' : $('#sds_sender_name').val(),
    'customer_email' : $('#sds_sender_email').val(),
    'email_subject': $('#sds_email_subject').val(),
    'enquiry': $('#sds_sender_enquiry').val()
};
在PHP中,您使用的是sds前缀(如表中所示):

您的参数应该与AJAX匹配,而不是与表单匹配(如下所示)

或者只在表单上使用序列化:

$.ajax(
    data: $("#sds_contact_form").serialize(),
    /*** others parameters ***/

在done部分中,您应该使用JSON.parse(数据);当您将json解码从php@Jigar7521不,他不应该。如果AJAX的数据类型定义为JSON,则不需要JSON.parse。Yeeessss!切换了代码,现在可以工作了!我唯一担心的是,当有人关闭javascript时,它将无法工作。我如何在php文件中对其进行编码以适应这两种情况?回答我自己,第二种解决方案(序列化表单)满足这两种情况,即我不必使参数与AJAX匹配。如果序列化表单,它将与HTML表单中的参数名一起提供。因此,您的PHP应该与表单名称匹配(就像您以前做的那样),谢谢。您的答案补充了@Gabriel Heming answer,并帮助我了解了如何在javascript同时打开和关闭时应对各种情况
var form_data = {
    'customer_name' : $('#sds_sender_name').val(),
    'customer_email' : $('#sds_sender_email').val(),
    'email_subject': $('#sds_email_subject').val(),
    'enquiry': $('#sds_sender_enquiry').val()
};
//get form data
$customer_name = $_POST['sds_customer'];
$customer_email = $_POST['sds_form_email'];
$email_subject = $_POST['sds_form_subject'];
$enquiry = $_POST['sds_form_enquiry'];
$customer_name = $_POST['customer_name'];
$customer_email = $_POST['customer_email'];
$email_subject = $_POST['email_subject'];
$enquiry = $_POST['enquiry'];
$.ajax(
    data: $("#sds_contact_form").serialize(),
    /*** others parameters ***/