Ajax无法收到我的“有效PHP脚本”的响应

时间:2018-12-20 01:06:30

标签: javascript php jquery html ajax

我目前正在使用Ajax,PHP和MySQL的混合物制作“联系”页面。 一些快速注释:

  • 所有PHP和AJAX代码均正常运行。我唯一无法工作的是PHP对AJAX的响应。

  • 此“联系”页面已经过优化,以便在浏览器上禁用JavaScript的情况下。该页面将使用简单的POST方法来完成操作。

  • 我有一些自定义函数(例如n()),这些函数已在我提供片段的文件中更早地声明。请忽略这些内容,因为它们不会影响该问题。

可以在每个代码块下面找到每个文件的细分。
contact_page.php(发生魔术的地方)

header('Content-type: application/json');
if(isset($_POST['l'])) {
if($_POST['l'] == 'php') { //This is related to the PHP version of the form validation. The code that handles the AJAX is farther down
$fd = $_POST['fd'];
$i = 0;
while ($i < count($fd)) { //Used to make sure all fields have been filled. Otherwise, return null.
    $fd[$i] = n($fd[$i],false);
    if(empty($fd[$i])) { $fd[$i] = null; }
$i++;
}

    if(isset($fd[0],$fd[1],$fd[2],$fd[3])) {
        if(filter_var($fd[1], FILTER_VALIDATE_EMAIL) && strlen($fd[1]) > 6) {
            $q1 = "INSERT INTO contact_msg VALUES ('".$fd[0]."','".$fd[1]."','".$fd[2]."','".$fd[3]."',NOW(),'$date-$id');";
            $r1 = mysqli_query($dbc1,$q1);
            if($r1) {
                    $h = 'From: Jewl Photography Notifications <contact@jewl-photography.net>' . "\r\n" .
                         'MIME-Version: 1.0' . "\r\n" .
                         'Content-type: text/html; charset=utf-8' . "\r\n" .
                         'Reply-To: contact@jewl-photography.net' . "\r\n" .
                         'X-Mailer: PHP/' . phpversion();

                    $m = m($fd[0],$fd[2],$fd[3],"$date-$id");
                    mail('nathan@lmartin.net','New Message From: '.$fd[0],$m,$h);
                        header('Location: https://jewl-photography.net/Contact?w=SNT');
            } else {
                header('Location: https://jewl-photography.net/Contact?w=INT_ERR');
            }
        } else {
            header('Location: https://jewl-photography.net/Contact?w=FLS_EMAIL');
        }
    } else {
        header('Location: https://jewl-photography.net/Contact?w=MISS_ALL');
    }
}

//Below is the code that handles the AJAX

if($_POST['l'] == 'ajax') {
    if(isset($_POST['name'],$_POST['email'],$_POST['subject'],$_POST['message'])) {
        $fd = array(n($_POST['name'],true),
                    n($_POST['email'],false),
                    n($_POST['subject'],false),
                    n($_POST['message'],false));

        if(filter_var($fd[1], FILTER_VALIDATE_EMAIL)) {
            $q1 = "INSERT INTO example_table VALUES ('".$fd[0]."','".$fd[1]."','".$fd[2]."','".$fd[3]."',NOW(),'$date-$id');";
            $r1 = mysqli_query($dbc1,$q1);
            if($r1) {
                echo json_encode('SENT');
                $h = '
                **Header Info**
                ';
                $m = m($fd[0],$fd[2],$fd[3],"$date-$id");
                mail('example@example.net','New Message From: '.$fd[0],$m,$h);
                } else {
                echo json_encode('ERROR_ADD');
            }
        } else { echo json_encode('FALSE_EMAIL'); }
    } else { echo json_encode('NOT_ALL'); }
}
}

contact_page.php非常简单。

  1. 它从Ajax中获取POST信息(如下所示)。

  2. 通过许多编码功能(例如htmlspecialchars()等,由n()表示)运行它。

  3. 还要测试是否满足某些要求。如果没有,则应将响应发送回AJAX(请参见步骤6)

  4. 将其添加到SQL表中。

  5. 向主持人发送电子邮件,让他们知道已经发送了新消息。

  6. 然后使用json对象将响应发送回“联系人”页面:echo json_encode('Response Text Here');

除第6步外,所有工作均正常。出于某种原因,AJAX拒绝接收响应。我没有收到任何PHP,SQL或JavaScript错误或警告,并且我的Ajax(如下所示)正在使用dataType JSON。

Contact.php(用户端联系页面)

            <script>
//This first half isn't ajax, skip down a few lines
//The very bottom of tis block of code is the form's html
                $(function() {

$('#fglk').submit(function() {
    var e = [];
    e[0] = $('#name').val();
    e[1] = $('#emal').val();
    e[2] = $('#subj').val();
    e[3] = $('#mesg').val();


    if(e[1].length > 6 && e[1].length < 255) {
        $('.err-span').removeClass('error');
        $('.err-span').html('');
    } else {
        $('.err-span').addClass('error');
        $('.err-span').html('Provide valid Email!');
        e[1] = null;
    }

   /**AJAX Related code \/ **/
    if(e[0] && e[1] && e[2] && e[3]) {
        var data = new Object();
        data.l       = 'ajax';
        data.name    = e[0];
        data.email   = e[1];
        data.subject = e[2];
        data.message = e[3];

        var options = new Object();
        options.data = data;
        options.dataType = 'json';
        options.type = 'post';
        options.success = function (response) {
            if(response == 'SENT') {
                $('.err-span').html('Sent!');
                $('.err-span').addClass('sent');
                $('.err-span').addClass('error');

            } else if(response == 'ERROR_ADD') {
                $('.err-span').html('An internal error prevented your message from being sent!');
                $('.err-span').addClass('error');

            } else if(response == 'NOT_ALL') {
                $('.err-span').html('Please fill out all fields!');
                $('.err-span').addClass('error');

            } else if(response == 'FALSE_EMAIL') {
                $('.err-span').html('You must provide a valid email!');
                $('.err-span').addClass('error');
            }
        };
        options.url = 'https://example.net/php/contact_page.php';

        $.ajax(options);
    } else {
    }
    return false;
});

});
            </script>
            <p style='color: red;'>
            <? //These $_GET parameters are for if raw PHP is used to send the message
            if($_GET['w'] == 'INT_ERR') {
                echo '**Some Text**';
            }
            if($_GET['w'] == 'FLS_EMAIL') {
                echo '**Some Text**';
            }
            if($_GET['w'] == 'MISS_ALL') {
                echo '**Some Text**';
            }
            if($_GET['w'] == 'SNT') {
                echo '**Some Text**';
            }
            ?>
            </p>
            <form action='https://example.net/php/contact_page.php?l=php' id='fglk' method='post'>
                <label>Full Name:</label><br><input type='text'  id='name' name='fd[]' required><br>
                <label>Email:</label><br><input type='email' id='emal' name='fd[]' required><br>
                <label>Subject:</label><br><input type='text'  id='subj' name='fd[]'><br>
                <label>Message:</label><br><textarea           id='mesg' name='fd[]' required></textarea><br>
                <span class='err-span'></span>
                <input type='submit' name='fd[]' value='Send'>
            </form>

Contact.php很容易说明。

  1. 它从表单中获取信息。

  2. 通过基本电子邮件验证运行电子邮件

  3. 将其传递给一些JSON对象。

  4. 通过$ .ajax()函数运行这些对象。

  5. 发出 return false; ,以防止表单发送和重新加载页面。

  6. 在PHP运行之后,AJAX应该接收响应并发送相应编写的消息。

它不会在我的控制台中引发任何错误。如果我提供的电子邮件少于6个字符,它将显示一个错误(尽管这与PHP代码完全无关)。但不会显示任何答复。

我之前使用过相同的AJAX代码,而且效果很好,主要区别在于PHP后端。

如果您对代码有任何疑问,请告诉我!

感谢您的帮助!

0 个答案:

没有答案