获取“SyntaxError:JSON.parse:意外字符”当响应正确时

时间:2014-03-18 18:58:48

标签: ajax json

我对这个错误感到很疯狂,我正在制作一个Ajax登录表单,这是我的代码:

我的HTML:

         <div id='login-box' name='login-box' class='radius-all-tiny'>
            <div class='bt-wrapper bt-wrapper-hover'>
                <span class='bt-icon bt-icon-hover btn-users'></span>
            </div>
            <div id='login-banner' name='login-banner'>
                " . $content['SESSION_BANNER'] . "
            </div>
            <div class='radius-all-tiny' id='login-error' name='login-error'>
                &nbsp;
            </div>
            <form id='login-frm' name='login-frm' method='post' action='./'>
                <input type='text' id='usuario' name='usuario' placeholder='" . $content['SESSION_USER'] . "' />
                <input type='password' id='contrasena' name='contrasena' placeholder='" . $content['SESSION_PASS'] . "' />
                <div class='submit-wrap'><input class='bt-submit radius-all-medium' type='submit' id='enviar' name='enviar' value='" . $content['CONTACT_FRM_SEND'] . "' /></div>
            </form>
        </div>

我的JS:

        <script type='text/javascript'>
        $(document).ready(function() {
            // FORCE BROWSER NOT CACHE AJAX CALLS
            $.ajaxSetup({ cache: false });

            // HIDE ERROR DIALOG
            $('#login-error').hide();

            // LOGIN/OUT BUTTON BEHAVIOR
            $('#bt-login').click(function(){
                $('#login-error').hide();
                $.fancybox.open({
                    href : '#login-box',
                    padding : 0,
                    onClosed : function() { }
                });
            });

            // LOADING ANIMATION
            var ajaxload = '<img src=\"../img/components/spinner-dark.gif\" alt=\"" . $content['MAIN_LOADING'] . "\" />';

            $('#login-frm').bind('submit', function(){
                // AUTHENTICATING...
                // VALIDAMOS QUE NO HAYAN CAMPOS VACÍOS
                if (($('#usuario').val().length < 1) || ($('#contrasena').val().length < 1))
                {
                    $('#login-error').html('EMPTY');
                    $('#login-error').show();
                    return false;
                }

                // SI NO ESTÁN VACÍOS LOS CAMPOS, ENTONCES VALIDAMOS...
                $.ajax({
                    type: 'POST',
                    cache: false,
                    url: '../libs/class.log.in.out.php',
                    data: {usuario: $('#usuario').val(), contrasena: $('#contrasena').val()},
                    dataType: 'json',
                    success: function(data)
                        {
                            if (data.success)
                            {
                                // ESCRIBIMOS LA VARIABLE DE SESIÓN
                                // CERRAMOS FANCYBOX
                                $.fancybox.close();
                                // RECARGAMOS LA PÁGINA PRINCIPAL
                                document.location.href = $('#urlactual');
                            }
                            else
                            {
                                // MOSTRAMOS ERROR DE AUTENTICACIÓN
                                $('#login-error').html('FAILED_AUTH');
                                $('#login-error').show();
                            }
                        }
                });
                return false;
            });
        });
        </script>

我的class.log.in.out.php:

/////////////////////////////////////////////////
// TRANSPORTADOR DE DATOS
/////////////////////////////////////////////////
$data = array(
    'success' => false,
    'msg' => 'No se encontró ningún dato...'
);

// SOLICITAMOS LOS VALORES DE CONEXIÓN
$usr     = (isset($_REQUEST['usuario']) ? $_REQUEST['usuario'] : 'NULL');
$pwd     = (isset($_REQUEST['contrasena']) ? $_REQUEST['contrasena'] : 'NULL');

// VALIDAMOS LOS DATOS
class_exists('Database') || require ('class.database.php');
$resp = "";
$thisstt = false;
// INSTANCIAMOS LA CLASE DE BASE DE DATOS
$dbs = new Database();
$datos = $dbs->logIn($usr, $pwd, "", $thisstt);

if ($thisstt)
    $resp = $datos['usuario'];
else
    $resp = "" . $datos['error'] . " Usuario: " . $usr . "";

// DEVOLVEMOS EL ESTADO DE LA VALIDACIÓN
$data = array(
    'success' => $thisstt,
    'msg' => utf8_encode($resp)
);

/////////////////////////////////////////////////
// EMPAQUETADO DE DATOS
/////////////////////////////////////////////////
header("Content-Type: application/json; charset=UTF-8");
echo json_encode($data);

我从de class.log.in.out.php收到此回复(使用Firefox的开发人员工具):

验证失败时:

  

{&#34;成功&#34;:false,&#34; msg&#34;:&#34; Los datos ingresados son错误... Usuario:123&#34;}

验证正确时:

  

{&#34;成功&#34;:真,&#34; MSG&#34;:&#34; gchinchilla&#34;}

但Firefox说语法不正确,你能帮帮我吗?

我为我糟糕的英语道歉,我正在学习它......

2 个答案:

答案 0 :(得分:0)

我认为没有必要将数组转换为json_encode的对象。

我建议使用:

echo json_encode($data);

而不是:

echo json_encode((object)$data);

答案 1 :(得分:0)

解决了!有一个&#34;编码错误&#34;,我已经将PHP文件从UTF-8转换为没有BOM的UTF-8。

此处有更多信息:http://es.wikipedia.org/wiki/UTF-8#Byte_order_mark_.28BOM.29