Uncaught SyntaxError:解析JSON时出现意外的令牌错误

时间:2016-03-01 19:40:12

标签: json ajax

我是AJAX的新手,似乎我可能错过了一个非常基本的细节。

我正在尝试在处理AJAX请求时调试服务器端。代码工作正常,服务器端注释掉了以下行。

//  php_console ($inputName, '  -  Field EMPTY!!!');

执行上面一行时,在AJAX成功函数解析JSON数据时会出现'Uncaught SyntaxError:Unexpected token'错误,如下所示

var valResponse = $.parseJSON(theResponse);

似乎AJAX返回变量'theResponse'在任何一种情况下都是相同的,至少在我打印时是可视的。

$("#contentRight").html(theResponse);

为什么回显任何导致parseJSON崩溃的东西?

任何帮助将不胜感激。

这是AJAX请求:

function performFormValidation(formID, fieldObject, action) {
    formFieldsData  = prepFormDataForAjax (formID);
    var URL      = BASE_DIR + 'formValidation.php'
    var formData = JSON.stringify(formFieldsData);

    $.ajax({
        url:    URL,
        type:   'POST',
        data:   {data:formData},
        success: function(theResponse){
            $("#contentRight").html(theResponse);
            var valResponse = $.parseJSON(theResponse);
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert ('Error: ' + errorThrown);
        }
    });
}

以下是AJAX流程:

<?php
$data = json_decode($_POST['data']);
$response = array();

foreach ($data as $dataField) {
    $inputName = $dataField[0][0];
    $formEntry = trim($dataField[0][1]);

    $validData = 1;
    $errorCode = '';
    foreach ($dataField as $pair) {

        //////////////////////////////////////////////////////////
        //  data-rule-required
        //////////////////////////////////////////////////////////
        if ($pair[0] == 'data-rule-required' && $pair[1] == 'true' && isEmpty($formEntry)) {
        //  php_console ($inputName, '  -  Field EMPTY!!!');
            $validData=0; $errorCode=sprintf( _('This field is requided'));
        }
    }
}
echo json_encode($response);

这是php_console函数:

function php_console($data, $alert) {
    echo '<script language="javascript">';
    echo 'console.log("' . $data . $alert .'")';
    echo '</script>';
}

1 个答案:

答案 0 :(得分:0)

所有PHP echo语句(通常)都直接转到Web服务响应 - 无论您将它放在何处。所有echo语句都按照代码控制流的顺序附加。在您的情况下会发生的情况是,javascript脚本标记显示为JSON的一部分并且会破坏语法。

查看浏览器中的响应标签以检查确切的响应 - 您将看到它不是JSON,因此您的错误。