Tôi đang sử dụng PHP json_encode()
trở lại một số dữ liệu, lấy ra bởi ajax()
jQuery:json_encode tạo JSON bị thay đổi (với nhân vật ẩn phụ)
Giản 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);
}
});
Các PHP là:
header('Content-Type: application/json; charset=UTF-8');
//default apiResponse
$apiResponse = [
"status" => 1,
"message" => "success",
"data" => null
];
Sau đó, khi php chạy mã của tôi, nó kết thúc bằng cách thêm dữ liệu này:
$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();
Các JSON:
{"status":1,"message":"success","data":[{"mid":340052,"card_type":"kakusei","header_size":48337,"saved_size":48337,"saved_path":"..\/card\/kakusei\/340052.png"}]}
Lúc đầu có vẻ như hợp lệ. Ajax của tôi truy xuất PHP này luôn kết thúc bằng parseerror
(do đó đi vào phần error
của ajax()
).
Nếu bạn sao chép và dán JSON này trên http://jsonlint.com/, thông báo cho biết "Mã thông báo không mong muốn" và http://jsonformatter.curiousconcept.com/ nói là không hợp lệ.
Tôi đã thử echo json_encode($apiResponse, JSON_UNESCAPED_SLASHES);
mặc dù thoát dấu gạch chéo là ok \/
nhưng không có sự khác biệt.
Nhưng những gì không chính xác hợp lệ? Chẳng phải PHP phải trả lại JSON hợp lệ sao?
thông tin thêm: Kiểm tra trên Windows7, Chrome v28.XX, sử dụng PHP 5.4.XX trên Apache
Câu hỏi Tôi đã đọc trước khi thực sự đăng này một:
- 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
Cập nhật:
sao chép từ SO vào JSONlint cho json hợp lệ. Vì vậy, tôi điều tra thêm một chút và nhận thấy PHP đang tạo ra một nhân vật ẩn kỳ lạ mà thực sự làm cho json không hợp lệ. Xem ảnh chụp màn hình bên dưới. Tôi khắc phục điều đó như thế nào?
JSONLint cho thấy nó là tốt. –
json của bạn hợp lệ và php của bạn hợp lệ. Tôi đoán đó là cuộc gọi ajax của bạn. Hãy thử sử dụng '$ .getJSON' một cuộc gọi ajax đơn giản hơn để yêu cầu json – sircapsalot
Hiển thị của nó hợp lệ trên jsonlint. –