gpt4 book ai didi

javascript - 未捕获的语法错误 : Unexpected token - JSON character encoding

转载 作者:行者123 更新时间:2023-11-28 07:52:27 25 4
gpt4 key购买 nike

在我的 Controller 中,我使用 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调用它时,一切正常,但是当我尝试直接运行handleResponseData()时,我在特殊字符上得到Uncaught SyntaxError: Unexpected token

我的 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);
});

最后是我的转换方法

protected static function convertToStrictUtf8 ($p_aValues) {
function detectEncoding(&$mValue) {
if (!mb_detect_encoding($mValue, 'UTF-8', true)) {
$mValue = utf8_encode($mValue);
}
}
array_walk_recursive($p_aValues, 'detectEncoding');

return $p_aValues;
}

为什么 json 字符串在使用 jquery $.post 获取时解析得很好,但在手动嵌入到代码中时却解析不好?我该如何解决这个问题?

编辑:从 console.log(rawData)

中精简版本的 rawData

获取

{"ServiceNumber":"485218-1138932068","Data":[{"RowId":"AEEA-IU3A61","ServiceRequestId":"AEEA-IU39LX","Name":"SV LIDEHÄLL)","FileSize":"8812","ServiceNumber":"485218-1138932068","Subject":"O(BERGMAN/LIDEHÄLL)
","Area":"svrT","Dir":"1702"}]}

发布

{"ServiceNumber":"485218-1138932068","Data":[{"RowId":"AEEA-IU3A61","ServiceRequestId":"AEEA-IU39LX","Name":"SV LIDEH\u00c4LL)","FileSize":"8812","ServiceNumber":"485218-1138932068","Subject":"O(BERGMAN\/LIDEH\u00c4LL)\r\n","Area":"svrT","Dir":"1702"}]} 

最佳答案

该问题是由换行符引起的。

作为jQuery.parseJSON()文档指出:不允许使用制表符或换行符等“控制字符”。

当使用 $.post 调用时,新行字符被转换为字符串 "\r\n",这就是该情况有效的原因。

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

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

关于javascript - 未捕获的语法错误 : Unexpected token - JSON character encoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26604823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com