Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获的语法错误:意外的令牌-JSON字符编码_Javascript_Php_Jquery_Ajax_Json - Fatal编程技术网

Javascript 未捕获的语法错误:意外的令牌-JSON字符编码

Javascript 未捕获的语法错误:意外的令牌-JSON字符编码,javascript,php,jquery,ajax,json,Javascript,Php,Jquery,Ajax,Json,在我的控制器中,我使用ajax处理POST请求,并将GET请求中的数据直接添加到js代码中 mycontroller.php $sServiceNumber = isset($_POST['ServiceNumber']) ? $_POST['ServiceNumber'] : $_GET['ServiceNumber']; //Here I do a db call for sServiceNumber and fetch some data as array $aAllrows $aR

在我的控制器中,我使用ajax处理POST请求,并将GET请求中的数据直接添加到js代码中

mycontroller.php

$sServiceNumber = isset($_POST['ServiceNumber']) ? $_POST['ServiceNumber'] :  $_GET['ServiceNumber'];

//Here I do a db call for sServiceNumber and fetch some data as array $aAllrows

$aResponse['ServiceNumber'] = $sServiceNumber;
$aResponse['Data'] = $aAllrows;
$sJson = json_encode(self::convertToStrictUtf8($aResponse));

if (isset($_POST['ServiceNumber'])) {
    echo $sJson;
    exit;
} else {
    $sJs = '
    $(document).ready(function() {
        var sData = \'' . $sJson . '\';
        handleResponseData(sData);
    });';

    MyHtmlHead::addExtraJsCode($sJs);

    //continue with rendering html page here..
}
当我用ajax调用它时,一切都正常,但当我尝试直接运行
HandlerResponseData()
时,我会在特殊字符上得到
未捕获的语法错误:意外标记

我的JavaScript

function handleResponseData ( rawData ) {
    response = jQuery.parseJSON(rawData);  //<--this is where the error occurs (on GET requests)

    //Make use of response data
}

$("form[name='searchform']").submit(function( event ) {
    event.preventDefault(); 
    // Send post and fetch some data!
    $.post(baseUrl, { ServiceNumber: $("input[name='ServiceNumber']").val(), time: "2pm" }).done(handleResponseData);
});
为什么json字符串在使用jquery
$.post获取时解析良好,而在手动嵌入代码时解析不好?我如何解决这个问题

编辑: 从
console.log(rawData)

得到

职位


在PHP控制器中,在echo JSON respose之前,键入以下行

header("Content-Type: application/json");
在jQueryAjax调用中,还需要提到数据类型为JSON

$.ajax({
 ...,
 ...,
 dataType: 'JSON', // it is necessary to get JSON response 
 ...
});

问题是由
换行引起的

正如文档所述:“控制字符”如制表符或换行符是不允许的

当使用
$.post
调用时,新行字符被转换为字符串
“\r\n”
,这就是该案例起作用的原因

添加类似这样的内容来删除新行最终解决了这个问题

function stripNewLines(&$mValue) {
    if(is_string($mValue)) {
        $mValue = trim(preg_replace('/\s+/', ' ', $mValue));
    }
}
array_walk_recursive($aResponse, 'stripNewLines');

发布原始数据。有一个更新的帖子。是的,有一个解析错误。但是为什么呢?正如您所看到的,您的json数据是不同的。@TimDev Yes ofc。否则它就会起作用;)但是为什么不同呢?
dataType:'JSON',
唯一需要的是服务器对内容类型撒谎(这是
header(“content-type:application/JSON”);
fixes)。这不是问题所在。另外,如果您阅读了问题,$.ajax调用也可以正常工作。
header("Content-Type: application/json");
$.ajax({
 ...,
 ...,
 dataType: 'JSON', // it is necessary to get JSON response 
 ...
});
function stripNewLines(&$mValue) {
    if(is_string($mValue)) {
        $mValue = trim(preg_replace('/\s+/', ' ', $mValue));
    }
}
array_walk_recursive($aResponse, 'stripNewLines');