php - echo Javascript 出现在警报中而不是处理中

标签 php javascript jquery ajax forms

我创建了一个使用 AJAX 处理表单的注册系统,这样我就可以返回 false。相关的js是最上面的代码块。我将此数据传递给 join.php,后者将其发送到数据库。我在 join.php 中运行检查,以确保没有人使用重复的电子邮件注册。如您所见,如果电子邮件已经存在,我想使用 javascript 插入一条消息。它没有读取脚本标签,而是简单地将它们以明文形式粘贴到我的警报中……所以我的警报有数据字符串,然后实际上说代码 <script>...</script> .我怎样才能让这个 js 改为处理?

Javascript:

$(".submit").click(function() {  
        var dataString = {
            school : $("#school").val(),
            studentEmail : $("#studentEmail").val(),
            studentPassword : $("#studentPassword").val(),
            parentEmail : $("#parentEmail").val(),
            parentPassword : $("#parentPassword").val(),
            studentFirstName : $("#studentFirstName").val(),
            studentLastName : $("#studentLastName").val(),
            studentPhone : $("#studentPhone").val(),
            parentFirstName : $("#parentFirstName").val(),
            parentLastName : $("#parentLastName").val(),
            parentPhone : $("#parentPhone").val()
        };
        $.ajax({
            type: "POST",
            url: "join.php",
            data: dataString,
            success: function(data) {
                alert ("data sent: "+ data);
            }
        });
        return false;
    }
});

加入.php

if($_POST) {
    $school             = mysql_real_escape_string($_POST['school']);
    $studentEmail       = mysql_real_escape_string($_POST['studentEmail']);
    $parentEmail        = mysql_real_escape_string($_POST['parentEmail']);
    $studentFirstName   = mysql_real_escape_string($_POST['studentFirstName']);
    $studentLastName    = mysql_real_escape_string($_POST['studentLastName']);
    $studentPhone       = mysql_real_escape_string($_POST['studentPhone']);
    $parentFirstName    = mysql_real_escape_string($_POST['parentFirstName']);
    $parentLastName     = mysql_real_escape_string($_POST['parentLastName']);
    $parentPhone        = mysql_real_escape_string($_POST['parentPhone']);

    $check = mysql_query("SELECT studentEmail FROM clients WHERE  studentEmail = '{$studentEmail}';");
    $num = mysql_num_rows($check);


    if (($num) == 0) {

        $sql = "INSERT INTO clients ".
            "(`studentEmail`, `studentPassword`, `parentEmail`, `parentPassword`, ".
            "`studentFirstName`, `studentLastName`, `studentPhone`, `parentFirstName`, ".
            "`parentLastName`, `parentPhone`, `school`) ".
            " VALUES ('$studentEmail', '$studentPassword', '$parentEmail', ".
            "'$parentPassword', '$studentFirstName', '$studentLastName', ".
            "'$studentPhone', '$parentFirstName', '$parentLastName', '$parentPhone', '$school')";

        $result = mysql_query($sql);
        if ($result) { 
            echo "Database query successful!";
        }
        else {
            die("Database query failed: " . mysql_error()); 
        }

        include "emails/signUp.php";
    }
    else {
        echo 'FAIL

        <script>
            $(".formErrorMessage").html("Email already exists");
        </script>';
    }
}

最佳答案

警报显示您的脚本 block ,因为您已经在成功处理程序中获得了它:

alert ("data sent: "+ data);

数据将是您在 PHP 中输​​出的任何文本。如果您希望根据您的请求是否成功获得可变行为,我建议您的 PHP 返回包含成功标志和消息的 JSON。您的 JavaScript 回调将如下所示:

function(data) {
    if (data.success) {
        alert ("data sent: "+ data.message);
    } else {
        $(".formErrorMessage").text(data.message);
    }
}

然后您的 PHP 应该将您的内容类型更改为 JSON:

header('Content-Type: application/json');

...你的 echo 会变成这样:

echo '{"success": false, "message": "Email already exists."}';

关于php - echo Javascript 出现在警报中而不是处理中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567753/

相关文章:

javascript - 自动刷新在线用户表而不刷新整个页面

php - 如何使用 ZF2 在 ldap Active Directory(AD) 中添加属性成员/memberOf

php - ACF 自定义查询 GET URL

javascript - 通过 AngularJS http GET 传递和访问参数

javascript - 为了能够使用像 Phaser、PixiJS 和 EaselJS 这样的库,我是否只需要用源代码制作一个 "connection"来下载库?

javascript - 使用 Angular 6 进行分步导航

javascript - 使用更改文本自动调整定义的 DIV 中的字体大小

javascript - 如何根据表中某一列中的值隐藏表行

javascript - 使用jquery添加html表格行无法设置为标记

jquery - 当设备屏幕较小时移除 div 元素的边框