json_encode tworzy zniekształcony JSON (z dodatkowym ukrytym znakiem)
Używam PHPjson_encode()
zwrócić niektóre dane, pobrane przez jQueryajax()
:
Uproszczony JS:
$.ajax({
dataType: 'json',
contentType: 'application/json',
cache: false,
type: 'POST',
url: './api/_imgdown.php',
error: function(jqXHR, textStatus, errorThrow) {
console.log(jqXHR, textStatus, errorThrow);
},
success: function(data, textStatus, jqXHR) {
console.log(data, textStatus, jqXHR);
}
});
PHP to:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
Następnie, gdy php uruchamia mój kod, kończy się dodaniem tych danych:
$apiResponse['data'][] = [
"mid" => (int)$mid,
"card_type" => $card_type,
"header_size" => (int)$headers['Content-Length'],
"saved_size" => (int)filesize($imgSavePath),
"saved_path" => $imgSavePath
];
//spit out the JSON
echo json_encode($apiResponse);
exit();
JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
Na początku wydaje się to ważne. Mój Ajax, który pobiera ten PHP, zawsze kończy sięparseerror
(wchodząc w ten sposób werror
częśćajax()
).
Jeśli skopiujesz i wkleisz ten JSON nahttp://jsonlint.com/, mówi „Nieoczekiwany token” ihttp://jsonformatter.curiousconcept.com/ mówi, że nie jest ważny.
próbowałemecho json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
nawet jeśli ucieczka jest dobra\/
ale nie robiło różnicy.
Ale co nie jest dokładnie ważne? Czy PHP nie miało zwracać poprawnego JSON?
Dodatkowe informacje: Testowanie na Windows7, Chrome 28.XX, używanie PHP 5.4.XX na Apache
Pytania, które przeczytałem przed opublikowaniem tego:
json_encode tworzy zniekształcone dane JSON?https://stackoverflow.com/a/15654848/684932o json_encode i ajax dataType: "json"php json_encode nie zwraca właściwego ciągu zakodowanego jsonAktualizacja:
Kopiowanie z SO do JSONlint daje ważny json. Zbadałem więc trochę dalej i zauważyłem, że PHP tworzy dziwną ukrytą postać, która w rzeczywistości czyni jsona nieważnym. Zobacz poniższy zrzut ekranu. Jak to naprawić?