Zawsze starałem się unikać używania większości właściwości protokołu HTTP ze względu na strach przed nieznanym.
Jednak powiedziałem sobie, że dziś zmierzę się ze strachem i zacznę celowo używać nagłówków. Próbuję przesłać json
dane do przeglądarki i od razu z niej korzystać. Na przykład, jeśli mam funkcję obsługi Ajax w stanie gotowości 4, który wygląda tak:
function ajaxHandler(response){
alert(response.text);
}
I ustawiłem nagłówek typu zawartości w moim kodzie PHP:
header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));
Dlaczego nie mogę uzyskać bezpośredniego dostępu do właściwości z funkcji obsługi, gdy przeglądarka jest wyraźnie poinformowana, że przychodzące dane są application/json
?
javascript
php
json
http
php_nub_qq
źródło
źródło
text
jako zmiennej javascript w module obsługi, a nie odpowiadać? To byłaby bardzo dziwna funkcjonalność. Json_encode tworzy również 1 obiekt z tablicy PHP. Więc kiedy dostaniesz to do javascript, musi być przypisane do zmiennej.JSON.parse()
. Możesz wykonać inną akcję lub wymusić błąd, jeśli pojawi się nieprawidłowy typ contentType.response.text
nadal jest to ciąg.Odpowiedzi:
Content-Type
Nagłówek jest po prostu używane jako o swojej aplikacji. Przeglądarka nie dba o to, co to jest. Przeglądarka po prostu zwraca dane z połączenia AJAX. Jeśli chcesz przeanalizować go jako JSON, musisz to zrobić samodzielnie.Nagłówek jest tam, więc Twoja aplikacja może wykryć, jakie dane zostały zwrócone i jak powinna je obsłużyć. Musisz spojrzeć na nagłówek, a jeśli to
application/json
następnie przeanalizować go jako JSON.Tak właśnie działa jQuery. Jeśli nie powiesz mu, co ma zrobić z wynikiem, używa
Content-Type
znaku do wykrycia, co z nim zrobić.źródło
header('Content-Type: application/json');
i nie wymusisz pobierania doContent-Disposition: attachment; filename=myfile.json
tego czasu, otrzymasz plikmyfile.json.html
. Używając tego nagłówka json, otrzymaszmyfile.json
..html
do pliku, ponieważ tak jest domyślnie.Content-Type: application/json
to tylko nagłówek treści. Nagłówek treści to po prostu informacja o rodzaju zwracanych danych, np. :: JSON, obraz (png, jpg, itd ..), html.Pamiętaj, że JSON w JavaScript to tablica lub obiekt. Jeśli chcesz zobaczyć wszystkie dane, użyj console.log zamiast alert:
Jeśli chcesz ostrzec oryginalną zawartość JSON jako ciąg, dodaj pojedyncze cudzysłowy ('):
Nie używaj cudzysłowów. To zmyli JavaScript, ponieważ JSON używa podwójnych cudzysłowów na każdej wartości i kluczu:
źródło
echo "'" . json_encode(array('text' => 'it\'s wrong')) . "'";
będzie produkować ten uszkodzony wyjście:'{"text":"it's wrong"}'
. Użyj tego zamiast:json_encode(json_encode(array('text' => 'it\'s good')))
. Wynik zostanie"{\"text\":\"it's wrong\"}"
Poniższy kod pomaga mi zwrócić obiekt JSON dla JavaScript w interfejsie użytkownika
Mój kod szablonu
template_file.json
Kod wspierany przez Pythona
Plik url.py
Kod jQuery dla interfejsu
źródło