Строка ответа JSON оканчивается на "ноль"
И в Postman, и в JQuery я получаю ответы в форме
{"key1": "value1", "key2": "value2"}null
Этот завершающий ноль мешает всему, что пытается проанализировать его на стороне клиента, и я не могу понять, откуда это происходит. Если я error_log
закодированный JSON перед echo
В нём нет завершающего нуля, поэтому я предполагаю, что это терминатор строки, но я не думал, что PHP использует строки с нулевым символом в конце. Как мне избавиться от этих нулей?
Кодируемый и возвращаемый объект:
public function jsonSerialize()
{
return [
'internal_id' => $this->internal_id, //int
'friendly_name' => $this->friendly_name, //string
'external_id' => $this->external_id, //string
'picture' => $this->picture //string
];
}
Фактическое возвращение просто echo(json_encode($retval));
4 ответа
После того, как файл PHP был выполнен, вы должны выйти вручную или вернуться вместо эхо, в противном случае он вернется NULL
неявно и все испортить. Урок выучен.
Вот некоторый код в дополнение к правильному ответу Кенни, указанному выше. Это предотвращает вывод 0 или NULL в конце json:
«После выполнения PHP-файла вам придется выйти вручную или вернуться вместо эха, иначе он неявно вернет NULL и все испортит. Урок усвоен».
ob_clean(); // Clears the output buffer to remove unexpected characters
echo json_encode($array);
exit(); // Terminates the script to prevent further output
Я получаю эту ошибку из-за вызова AJAX PHP-скрипта, когда вы используете его для отправки данных обратно во внешний интерфейс.
Чтобы завершить PHP-скрипт, в котором выecho
, вам придется убить скрипт, используяdie
иexit
и некоторые случаиreturn
вот так
$arrayToJsonData = ["some", "array", "result"];
echo(json_encode($arrayToJsonData));
//Kill the script here by using die or exit
die;
Не самый элегантный, наверное... но это меня СПАСИЛО:
function removeTrailingNulls(__str){
var sanitized = __str;
var lastCharIndex = sanitized.length - 1;
var lastChar = sanitized[lastCharIndex];
var lastCharCode = lastChar.charCodeAt(0);
var isWeirdNullSpace = lastCharCode === 0;
console.log('checking last char (' + lastChar + ') code: ' + lastCharCode + '...null space end?' + isWeirdNullSpace);
var loopCount = 0;
while(isWeirdNullSpace){
sanitized = sanitized.substring(0, sanitized.length-1);
lastChar = sanitized[sanitized.length-1];
lastCharCode = lastChar.charCodeAt(0);
isWeirdNullSpace = lastCharCode === 0;
loopCount++;
if(loopCount>100) break; // prevent infinite loops just in case.
}
return String(sanitized);
}