Повторяющийся Javascript появляется в предупреждении вместо обработки - PullRequest
1 голос
/ 20 декабря 2011

Я создал систему регистрации, которая использует 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;
    }
});

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>';
    }
}

Ответы [ 3 ]

2 голосов
/ 20 декабря 2011

Предупреждение показывает ваш блок скриптов, потому что вы получили это в вашем обработчике успеха:

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 '{"success": false, "message": "Email already exists."}';
0 голосов
/ 20 декабря 2011

от 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, который должен быть выполнен.

0 голосов
/ 20 декабря 2011

Ваш серверный вызов не должен возвращать необработанный HTML. Должен возвращать JSON, который содержит всю информацию о состоянии, необходимую серверу для обработки вещей. то есть в обычном случае:

{'success': true}

или

{'success': false, 'emailAlreadyExists': true, 'msg': 'Email Already Exists'}

из

{'success': false, 'msg': 'Database query failed: blahblahMySqlError'}

Тогда ваш клиент 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");
            }
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...