2016-03-01 110 views
0

我是AJAX的新手,看来我可能会缺少一个非常基本的细节。未捕获的SyntaxError:解析JSON时出现意外的令牌错误

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

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

当上述行执行它给“未捕获的SyntaxError:意外令牌”的错误,而在AJAX成功函数解析JSON数据,在下面的行

var valResponse = $.parseJSON(theResponse); 

好像AJAX返回变量'反应'无论如何都是一样的,至少在我打印时是直观的。

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

为什么echo'ing出什么导致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>'; 
} 

回答

0

所有PHP echo语句(典型值)直接转到Web服务响应 - 无论您在何处放置它。所有回显语句都按您的代码的控制流程顺序附加。你的情况会发生什么,JavaScript脚本标签显示为你的JSON的一部分,并破坏了语法。

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

相关问题