Php 出现在警报中而不是处理中的回显Javascript

Php 出现在警报中而不是处理中的回显Javascript,php,javascript,jquery,ajax,forms,Php,Javascript,Jquery,Ajax,Forms,我创建了一个注册系统,它使用AJAX来处理表单,以便返回false。相关的js是代码的顶层。我将此数据传递给join.php,后者将其发送到数据库。我在join.php中运行了一个检查,以确保没有人已经注册了重复的电子邮件。如您所见,如果电子邮件已经存在,我想使用javascript插入一条消息。它不是读取脚本标记,而是简单地将它们以明文形式粘贴到我的警报中……因此我的警报具有数据字符串,然后实际显示代码…。我怎样才能让这个js来处理呢 Javascript: $(".submit").clic

我创建了一个注册系统,它使用AJAX来处理表单,以便返回false。相关的js是代码的顶层。我将此数据传递给join.php,后者将其发送到数据库。我在join.php中运行了一个检查,以确保没有人已经注册了重复的电子邮件。如您所见,如果电子邮件已经存在,我想使用javascript插入一条消息。它不是读取脚本标记,而是简单地将它们以明文形式粘贴到我的警报中……因此我的警报具有数据字符串,然后实际显示代码
。我怎样才能让这个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;
    }
});
join.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>';
    }
}
if($\u POST){
$school=mysql\u real\u escape\u字符串($\u POST['school']);
$studentEmail=mysql\u real\u escape\u字符串($\u POST['studentEmail']);
$parentEmail=mysql\u real\u escape\u字符串($\u POST['parentEmail']);
$studentFirstName=mysql\u real\u escape\u字符串($\u POST['studentFirstName']);
$studentLastName=mysql\u real\u escape\u字符串($\u POST['studentLastName']);
$studentPhone=mysql\u real\u escape\u字符串($\u POST['studentPhone']);
$parentFirstName=mysql\u real\u escape\u字符串($\u POST['parentFirstName']);
$parentLastName=mysql\u real\u escape\u字符串($\u POST['parentLastName']);
$parentPhone=mysql\u real\u escape\u字符串($\u POST['parentPhone']);
$check=mysql_query(“从客户端选择studentEmail,其中studentEmail='{$studentEmail}';”;
$num=mysql\u num\u行($check);
如果(($num)==0){
$sql=“插入到客户端”。
“(`studentEmail`、`studentPassword`、`parentEmail`、`parentPassword`、”。
“`studentFirstName`、`studentLastName`、`studentPhone`、`parentFirstName`、”。
“`parentLastName`、`parentPhone`、`school`”)。
值(“$studentEmail”、“$studentPassword”、“$parentEmail”、”。
“$parentPassword'、$studentFirstName'、$studentLastName'、”。
“$studentPhone'、$parentFirstName'、$parentLastName'、$parentPhone'、$school')”;
$result=mysql\u查询($sql);
如果($结果){
echo“数据库查询成功!”;
}
否则{
die(“数据库查询失败:”.mysql_error());
}
包括“email/signUp.php”;
}
否则{
“回声”失败
$(“.formErrorMessage”).html(“电子邮件已存在”);
';
}
}

警报显示您的脚本块,因为您的成功处理程序中有以下内容:

alert ("data sent: "+ data);
数据将是您在PHP中输出的任何文本。如果您希望根据请求是否成功来确定变量行为,我建议您的PHP返回包含成功标志和消息的JSON。您的JavaScript回调将如下所示:

function(data) {
    if (data.success) {
        alert ("data sent: "+ data.message);
    } else {
        $(".formErrorMessage").text(data.message);
    }
}
echo '{"success": false, "message": "Email already exists."}';
然后,PHP应将内容类型更改为JSON:

header('Content-Type: application/json');
。。。你的回声会变成这样:

function(data) {
    if (data.success) {
        alert ("data sent: "+ data.message);
    } else {
        $(".formErrorMessage").text(data.message);
    }
}
echo '{"success": false, "message": "Email already exists."}';

您的服务器调用不应返回原始HTML。应该返回JSON,其中包含服务器处理事情所需的所有状态信息。i、 e.在通常情况下:

{'success': true}

然后你的客户端JS应该处理它

$.ajax({
    type: "POST",
    url: "join.php",
    data: dataString,
    success: function(data) {
        if(data.success) {
            alert ("success!");
        }
        else{
            alert("error: " + data.msg);
            if(data.emailAlreadyExists){
                $(".formErrorMessage").html("Email already exists");
            }
        }
    }
});

在php中,您已经给出了格式化的状态响应

关于成功:

echo '{"status":"success", message:"Database query successful!"}';
如果帐户已存在:

echo '{"status":"failed", message:"Email already exists"}';
所以您将能够在JavaScript回调函数中识别这一点

$.ajax({
        type: "POST",
        url: "join.php",
        data: dataString,
        success: function(data) {
            if(status.error == "failed"){
                $(".formErrorMessage").html(data.message);
            }
        }
    });
这是最好的方法。或者,如果您只想执行从php接收的字符串,可以使用eval

        success: function(data) {
            eval(data);
        }

在这种情况下,不需要使用script标记作为响应,只需要执行Javascript语句。

alert
不会评估您的Javascript。对,这正是我面临的问题。该警报调用join.php中的数据,其中包括我需要处理的js。我如何处理这个js而不是它出现在警报中?我认为@AndrewHitaker的意思是,警报当然会显示纯文本;您尝试过其他哪些方法来实际执行脚本,无论它们是否失败。。。附加到DOM?运行评估(不推荐;只是举个例子)?对不起,我还是个初学者。我不知道我该如何确切地尝试另一种方法。我只是发出警报,以便知道查询已通过,而不必检查数据库。成功似乎发生在发送数据时,因此即使$num==0,查询仍然成功。因此,我必须在该语句中包含js。@Radleybobbins:对简短的响应表示歉意——我应该详细说明,但它总是返回成功,因为即使数据未发布到join.php,也总是发送数据。因此,即使用户存在,AJAX也会向我发送警报,告诉我数据已发送。我如何告诉join.php返回失败?这就是为什么您发送回的数据需要在成功标志中指示true或false。Ajax调用中的成功回调仅表示返回了非HTTP错误响应。您可以使用该标志来控制页面是否将结果视为成功。是的,这就是我要查找的。我将如何表示正确或错误?使用echo语句;将JSON中的
false
更改为
true
。会显示您的警报,因为这是您的JavaScript回调所做的唯一事情。如果您希望JavaScript做更多的工作(即处理错误),则需要在回调中添加该代码,并且需要一种区分成功和失败的方法(从服务器发送JSON结果可以帮助您做到这一点)。我使用的注释与下面的答案相同:“但是它总是返回成功,因为数据总是被发送,即使它没有发布到join.php。因此,即使用户存在,AJAX也会向我发送警报,告诉我数据已发送。如何让join.php返回失败?–嗯,这似乎对我不起作用。它并没有返回表单false(我在中添加了它,在这里和“else”之后都添加了它)