Saya ingin mengembalikan JSON dari skrip PHP.
Apakah saya hanya mengulang hasilnya? Apakah saya harus mengatur Content-Type
tajuk?
Meskipun biasanya Anda baik-baik saja tanpanya, Anda dapat dan harus mengatur header Tipe Konten:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Jika saya tidak menggunakan kerangka kerja tertentu, saya biasanya mengizinkan beberapa params permintaan untuk mengubah perilaku keluaran. Ini bisa berguna, umumnya untuk pemecahan masalah cepat, untuk tidak mengirim header, atau kadang-kadang print_r muatan data untuk melihatnya (meskipun dalam kebanyakan kasus, itu tidak perlu).
header('Content-type:application/json;charset=utf-8');
Sepotong lengkap kode PHP yang bagus dan jelas mengembalikan JSON adalah:
sumber
Menurut manual pada
json_encode
metode ini dapat mengembalikan non-string ( false ):Ketika ini terjadi
echo json_encode($data)
akan menampilkan string kosong, yang tidak valid JSON .json_encode
misalnya akan gagal (dan kembalifalse
) jika argumennya berisi string non UTF-8.Kondisi kesalahan ini harus ditangkap dalam PHP, misalnya seperti ini:
Maka pihak penerima tentu harus menyadari bahwa keberadaan properti jsonError menunjukkan kondisi kesalahan, yang harus diperlakukan sesuai.
Dalam mode produksi, mungkin lebih baik untuk mengirim hanya status kesalahan umum ke klien dan mencatat pesan kesalahan yang lebih spesifik untuk penyelidikan selanjutnya.
Baca lebih lanjut tentang berurusan dengan kesalahan JSON dalam Dokumentasi PHP .
sumber
charset
parameter untuk JSON; lihat catatan di akhir tools.ietf.org/html/rfc8259#section-11 : "Tidak ada parameter 'charset' yang ditentukan untuk pendaftaran ini. Menambahkan satu benar-benar tidak berpengaruh pada penerima yang patuh." (JSON harus ditransmisikan sebagai UTF-8 per tools.ietf.org/html/rfc8259#section-8.1 , jadi sebutkan bahwa itu disandikan sebagai UTF-8 agak berlebihan.)charset
Parameter redundan dihapus dari string header HTTP.Coba json_encode untuk menyandikan data dan mengatur tipe konten dengan
header('Content-type: application/json');
.sumber
Setel jenis konten dengan
header('Content-type: application/json');
lalu gema data Anda.sumber
Juga baik untuk mengatur keamanan akses - cukup ganti * dengan domain yang Anda inginkan untuk mencapainya.
Berikut adalah lebih banyak sampel tentang itu: bagaimana cara memotong Access-Control-Allow-Origin?
sumber
sumber
Seperti dikatakan di atas:
akan membuat pekerjaan. tetapi perlu diingat bahwa:
Ajax tidak akan memiliki masalah untuk membaca json bahkan jika header ini tidak digunakan, kecuali jika json Anda mengandung beberapa tag HTML. Dalam hal ini Anda perlu mengatur header sebagai aplikasi / json.
Pastikan file Anda tidak dikodekan dalam UTF8-BOM. Format ini menambahkan karakter di bagian atas file, sehingga panggilan tajuk () Anda akan gagal.
sumber
Fungsi sederhana untuk mengembalikan respons JSON dengan kode status HTTP .
sumber
header_remove
, dan secara eksplisit mengatur respons http adalah ide yang bagus; meskipun pengaturan status dan kemudian http_response tampaknya berlebihan. Mungkin juga ingin menambahkanexit
pernyataan sampai akhir. Saya menggabungkan fungsi Anda dengan @trincot: stackoverflow.com/a/35391449/339440Jawaban untuk pertanyaan Anda ada di sini ,
Ia mengatakan.
jadi jika Anda mengatur header ke tipe itu, dan output string JSON Anda, itu akan berfungsi.
sumber
Ya, Anda harus menggunakan gema untuk menampilkan output. Mimetype: application / json
sumber
Jika Anda perlu mendapatkan json dari php mengirimkan informasi khusus, Anda dapat menambahkan ini
header('Content-Type: application/json');
sebelum mencetak hal lain, Jadi, Anda dapat mencetak Anda customeecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
sumber
Jika Anda meminta basis data dan memerlukan hasil yang ditetapkan dalam format JSON, itu bisa dilakukan seperti ini:
Untuk bantuan dalam mem-parsing hasil menggunakan jQuery lihat tutorial ini .
sumber
Ini adalah skrip PHP sederhana untuk mengembalikan id perempuan dan pengguna sebagai nilai json akan menjadi nilai acak apa pun saat Anda memanggil skrip json.php.
Semoga bantuan ini terimakasih
sumber
Cara mudah untuk memformat objek domain Anda ke JSON adalah dengan menggunakan Marshal Serializer . Kemudian
json_encode
kirimkan data ke dan kirim tajuk Jenis Konten yang benar untuk kebutuhan Anda. Jika Anda menggunakan kerangka kerja seperti Symfony, Anda tidak perlu mengurus pengaturan header secara manual. Di sana Anda dapat menggunakan JsonResponse .Misalnya, Tipe-Konten yang benar untuk menangani Javascript adalah
application/javascript
.Atau jika Anda perlu mendukung beberapa browser yang cukup lama yang paling aman
text/javascript
.Untuk semua keperluan lain seperti penggunaan aplikasi seluler
application/json
sebagai Tipe-Konten.Ini adalah contoh kecil:
sumber
Setiap kali Anda mencoba mengembalikan respons JSON untuk API atau pastikan Anda memiliki tajuk yang tepat dan juga pastikan Anda mengembalikan data JSON yang valid.
Berikut ini contoh skrip yang membantu Anda mengembalikan respons JSON dari array PHP atau dari file JSON.
sumber
Anda dapat menggunakan perpustakaan PHP kecil ini . Mengirim header dan memberi Anda objek untuk menggunakannya dengan mudah.
Sepertinya :
sumber