Плагин JQuery Form не работает с dataType: 'json' - PullRequest
0 голосов
/ 15 августа 2011

Возникли проблемы при получении формы с использованием PHP, плагина JQuery Form и плагина JQuery Validate для правильной работы.Я использую плагин Validation v 1.8.1, так что это не связано с ошибкой чтения dataType: 'json', как jsonp.Ниже приведен HTML-код:

<?php require_once('includes/initialize.php'); ?>
<?php require_once('layouts/header.php'); ?>
<body>
    <div class="container_12">

        <div class="grid_4" id="form">

            <form action="actions/register.php" method="POST" class="cmxform" name="frmPrntRgstr" id="frmPrntRgstr">
        <p>
                <label>Desired Username:</label>
                <input type="text" name="userName" id="userName" value="" />
        </p>
            <div class="clear"></div>
        <p>
                <label>Password:</label>
        <input type="password" name="Pwd" id="Pwd" />   
        </p>
            <p>
                <label>Confirm Password:</label>
                <input type="password" name="confirmPwd" id="confirmPwd" />
            </p>
            <div class="clear"></div> 
            <p> 
                <label>First Name:</label>
                <input type="text" name="firstName" id="firstName" value="" />
            </p>
            <div class="clear"></div>
            <p>
                <label>Last Name:</label>
                <input type="text" id="lastName" name="lastName" value="" />
            </p>
            <div class="clear"></div>
            <p>
                <label>Email Address:</label>
                <input type="text" id="email" name="email" value="" />
            </p>
            <div class="clear"></div>
            <p> 
                <label>Cell Phone:</label>
                <input type="text" id="cellPhone" name="cellPhone" value="" />
            </p>
            <p>
                <label>Home Phone:</label>
                <input type="text" id="homePhone" name="homePhone" value="" />
            </p>
            <input type="hidden" id="role" name="role" value="2" />
            <input type="hidden" id="approved" name="approved" value="0" />
            <input type="hidden" id="school" name="school" value="0" />
            <p>
                 <input class="submit" type="submit" id="regUser" value="Submit" />
            </p>
        </form>
        <p id="frmPrntRgstrRspns" style="display: none;">A Response goes here.</p>
    </div>
</div>

Упрощенная версия register.php без проверки ошибок:

<?php require_once('../includes/initialize.php'); ?>
<?php require_once('../layouts/appheader.php'); ?>

<?php
    if (isset($_POST["userName"])) {
    $auser = new User();
    $auser->userName = $_POST['userName'];
    $auser->hshdPwd = sha1($_POST['Pwd']);
    $auser->firstName = $_POST['firstName'];
    $auser->lastName = $_POST['lastName'];
    $auser->email = $_POST['email'];
    $auser->cellPhone = $_POST['cellPhone'];
    $auser->homePhone = $_POST['homePhone'];
    if(!is_null($_POST['school'])) {
         $auser->school = $_POST['school'];
    } else {
    $auser->school = "0";   
    }
    $auser->prelim_role = $_POST['role'];
    $auser->approved = $_POST['approved'];
    if($auser->create()) {
    $abc = array('response'=>"Request successfully submitted"); ;
    } else { 
    $abc = array('response'=>"Errors.");
    } 
return ?> 
    <script type="text/javascript"> 
        var resp2 = '<?php echo json_encode($abc, JSON_FORCE_OBJECT); ?>';
    </script>
    <?php
    }
    ?>

Ниже приведен файл register.js:

$(document).ready(function() { 
$("#frmPrntRgstr").validate({
                    rules: {
                            firstName: "required",
                            lastName: "required",
                            userName: {
                                required: true,
                                minlength: 6
                            },
                            Pwd: {
                            required: true,
                            minlength: 6
                            },
                            confirmPwd: {
                                required: true,
                                minlength: 6,
                                equalTo: '#Pwd'
                            },
                            homePhone: {
                                required: true,
                            },
                            cellPhone: {
                                required: true,
                            },
                            email: {
                                required: true,
                                email: true
                            },
                            },
                            messages: {
                            firstName: "Please enter your firstname",
                            lastName: "Please enter your lastname",
                            userName: {
                                required: "Please enter a username",
                                minlength: "Your username must consist of at least 6 characters"
                            },
                            hshdPwd: {
                                required: "Please provide a password",
                                minlength: "Your password must be at least 6 characters long"
                            },
                            confirmPwd: {
                                required: "Please provide a password",
                                minlength: "Your password must be at least 6 characters long",
                                equalTo: "Please enter the same password as above"
                            },
                            email: "Please enter a valid email address",
                            },
                            submitHandler: function(form) {
                                $("#frmPrntRgstr").ajaxSubmit({
                                                        dataType: 'json',
                                                    success:    processJson,
                                                        })
                            }
});
                function processJson() {
                        var resp3 = $.parseJSON(resp2); 
            $("#frmPrntRgstr").slideUp("normal", function() {
                            $(resp3.response).appendTo("#frmPrntRgstrRspns", function() {
                       $("#frmPrntRgstrRspns").slideDown("normal");
                                 })
            })
                }
});

Я попытался изменить тип содержимого на «application / json» во всех файлах.Когда я удаляю dataType: 'json' и получаю функцию успеха, такую ​​как $("#frmPrntRgstr").slideUp("normal", function () { $("#frmPrntRgstrRspns").slideDown("normal") });, все работает нормально.Когда я добавляю dataType: 'json', даже когда я не пытаюсь проанализировать ответ сервера json или использовать его в функции успеха, новый пользователь будет вставлен в базу данных MySQL, но клиентская сторона не видит ответа.Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 15 августа 2011

Вот что возвращает ваш скрипт:

<script type="text/javascript"> 
    var resp2 = '<?php echo json_encode($abc, JSON_FORCE_OBJECT); ?>';
</script>

Это не JSON, это фрагмент HTML, который содержит тег скрипта с объявленной внутри него переменной javascript.

AОтвет JSON будет выглядеть как <?php echo json_encode($abc); ?> в одиночку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...