Chcę zwrócić JSON ze skryptu PHP.
Czy po prostu odbijam wynik? Czy muszę ustawić Content-Type
nagłówek?
Chociaż bez niego zwykle nic ci nie jest, możesz i powinieneś ustawić nagłówek Content-Type:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Jeśli nie używam określonego frameworka, zazwyczaj pozwalam niektórym parametrom żądania modyfikować zachowanie wyjściowe. Przydatne może być, na ogół, szybkie rozwiązywanie problemów, aby nie wysyłać nagłówka, a czasem print_r ładunku danych, aby go zobaczyć (choć w większości przypadków nie powinno to być konieczne).
header('Content-type:application/json;charset=utf-8');
Kompletny kawałek ładnego i przejrzystego kodu PHP zwracającego JSON to:
źródło
Zgodnie z instrukcją dotyczącą
json_encode
metody może zwrócić ciąg nieciągowy ( false ):Kiedy tak się
echo json_encode($data)
stanie, wyświetli pusty ciąg znaków, który jest niepoprawny JSON .json_encode
na przykład zawiedzie (i zwrócifalse
), jeśli jego argument zawiera łańcuch inny niż UTF-8.Ten warunek błędu powinien zostać przechwycony w PHP, na przykład tak:
Następnie koniec odbierający powinien oczywiście mieć świadomość, że obecność właściwości jsonError wskazuje na warunek błędu, który należy odpowiednio traktować.
W trybie produkcyjnym lepiej byłoby wysłać klientowi tylko ogólny status błędu i zapisać bardziej szczegółowe komunikaty o błędach w celu późniejszego zbadania.
Przeczytaj więcej o radzeniu sobie z błędami JSON w Dokumentacji PHP .
źródło
charset
parametru dla JSON; patrz uwaga na końcu tools.ietf.org/html/rfc8259#section-11 : „Dla tej rejestracji nie zdefiniowano parametru„ charset ”. Dodanie jednego naprawdę nie ma wpływu na zgodnych odbiorców”. (JSON musi być przesyłany jako UTF-8 na tools.ietf.org/html/rfc8259#section-8.1 , więc określenie, że jest zakodowane jako UTF-8, jest nieco zbędne.)charset
parametr usunięty z ciągu nagłówka HTTP.Spróbuj json_encode, aby zakodować dane i ustawić typ zawartości za pomocą
header('Content-type: application/json');
.źródło
Ustaw typ zawartości za pomocą,
header('Content-type: application/json');
a następnie wyświetl dane.źródło
Dobrze jest również ustawić bezpieczeństwo dostępu - wystarczy zastąpić * domeną, do której chcesz uzyskać dostęp.
Oto więcej przykładów na ten temat : jak ominąć Access-Control-Allow-Origin?
źródło
źródło
Jak powiedziano powyżej:
wykona pracę. ale pamiętaj, że:
Ajax nie będzie miał problemu z odczytaniem jsona, nawet jeśli ten nagłówek nie zostanie użyty, chyba że twój json zawiera pewne tagi HTML. W takim przypadku musisz ustawić nagłówek jako application / json.
Upewnij się, że plik nie jest zakodowany w UTF8-BOM. Ten format dodaje znak na początku pliku, więc wywołanie header () zakończy się niepowodzeniem.
źródło
Prosta funkcja zwracająca odpowiedź JSON z kodem stanu HTTP .
źródło
header_remove
, i jawne ustawienie odpowiedzi http jest dobrym pomysłem; chociaż ustawienie statusu, a następnie odpowiedź http_ wydaje się zbędna. Może też chcesz dodaćexit
instrukcję na końcu. Połączyłem twoją funkcję z @trincot's: stackoverflow.com/a/35391449/339440Odpowiedź na twoje pytanie jest tutaj ,
To mówi.
więc jeśli ustawisz nagłówek na ten typ i wypiszesz swój ciąg JSON, powinien on działać.
źródło
Tak, musisz użyć echa, aby wyświetlić dane wyjściowe. Mimetype: application / json
źródło
Jeśli potrzebujesz dostać jsona z php wysyłającego niestandardowe informacje, możesz dodać to
header('Content-Type: application/json');
wcześniej, aby wydrukować coś innego, więc możesz wydrukować ci klientaecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
źródło
Jeśli przeszukujesz bazę danych i potrzebujesz zestawu wyników w formacie JSON, możesz to zrobić w następujący sposób:
Aby uzyskać pomoc w analizowaniu wyniku za pomocą jQuery, zapoznaj się z tym samouczkiem .
źródło
Jest to prosty skrypt PHP zwracający męską kobietę i identyfikator użytkownika, ponieważ wartość json będzie dowolną wartością losową, gdy wywołasz skrypt json.php.
Mam nadzieję, że dzięki tej pomocy
źródło
Prostym sposobem sformatowania obiektów domeny w JSON jest użycie Marshal Serializer . Następnie przekaż dane
json_encode
i wyślij odpowiedni nagłówek Content-Type do swoich potrzeb. Jeśli używasz frameworka takiego jak Symfony, nie musisz ręcznie ustawiać nagłówków. Tam możesz użyć JsonResponse .Na przykład poprawnym typem treści do obsługi JavaScript byłby
application/javascript
.Lub jeśli potrzebujesz obsługi kilku dość starych przeglądarek, najbezpieczniejszym byłoby
text/javascript
.Do wszystkich innych celów, takich jak korzystanie z aplikacji mobilnej
application/json
jako Content-Type.Oto mały przykład:
źródło
Ilekroć próbujesz zwrócić odpowiedź JSON dla interfejsu API lub upewnij się, że masz odpowiednie nagłówki, a także upewnij się, że zwracasz prawidłowe dane JSON.
Oto przykładowy skrypt, który pomaga zwrócić odpowiedź JSON z tablicy PHP lub z pliku JSON.
źródło
Możesz użyć tej małej biblioteki PHP . Wysyła nagłówki i daje obiekt do łatwego użycia.
To wygląda jak :
źródło