używam PHP json_encode()
wrócić niektóre dane, pobierane przez jQuery ajax()
:json_encode tworzenia nieprawidłowy JSON (dodatkowo ukryty znak)
uproszczonym 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);
}
});
PZP jest:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
Potem, gdy php działa mój kod, to kończy się dodając te dane:
$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"}]}
Początkowo wydaje się ważne. Mój Ajax, który pobiera ten PHP, zawsze kończy się parseerror
(przechodząc do części error
z ajax()
).
Jeśli skopiujesz i wkleisz ten JSON pod numer http://jsonlint.com/, pojawi się komunikat "Nieoczekiwany token", a http://jsonformatter.curiousconcept.com/ jest nieprawidłowe.
Próbowałem już echo json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
mimo że uciekanie ukośników jest ok. \/
, ale nie miało to żadnego znaczenia.
Ale co nie jest dokładnie poprawne? Czy PHP nie powinno zwracać poprawnego JSON?
Dodatkowe info: Testowanie na Windows7, Chrome v28.XX, używając PHP 5.4.XX na Apache
Pytania Czytałem przed faktycznie opublikowania tego:
- json_encode creating malformed JSON data?
- https://stackoverflow.com/a/15654848/684932
- about json_encode and ajax dataType: "json"
- php json_encode not returning proper json encoded string
Aktualizacja:
Kopiowanie z SO w JSONlint daje poprawny JSON. Zbadałem więc trochę dalej i zauważyłem, że PHP tworzy dziwną ukrytą postać, która w rzeczywistości czyni json nieważnym. Zobacz poniżej zrzut ekranu. Jak to naprawić?
JSONLint pokazuje, że jest dobry. –
Twój json jest ważny, a twój php jest ważny. Zgaduję, że to twoje połączenie ajaxowe. Spróbuj użyć '$ .getJSON' prostszego wywołania ajaxowego dla zapytania json – sircapsalot
Jego wyświetlenie jest poprawne na jsonlint. –