web-dev-qa-db-ja.com

PHPでheader( 'Content-Type:application / json')を使用する場合

私は実際にphpスクリプトでのheader('Content-Type: application/json')の使用法を理解しようとしましたが、この主題に関するstackoverflowでさまざまな質問と回答を見つけましたが、それでも完全に理解できません...

だからここに質問があります:私はいくつかのPHPプロジェクトでこのコード行を見たことがあります、そして私は理解しようとしています

  • 別のWebページがこの実際のスクリプトを(たとえばajaxを使用して)呼び出しているときにこれを使用して、呼び出しページがPHPページからjsonを取得できるようにする場合

OR

  • このスクリプトが、phpページが別のWebページから送信されたjsonを処理することを意味する場合。または多分何か???

回答した場合に役立つもう1つのことは、最近、cURLを使用してリソース(外部URL)からjsonを取得していて、このヘッダー(Content-type:application/json)をリクエストに含める必要があったことです。返されたjsonを処理できるように、このヘッダーを労力リソースに送信しましたか、それともこのMYヘッダーでしたか?

ありがとう

5
naspy971

興味のある人にはわかりましたが、header('Content-Type: application/json')が使用されていることを最後に理解しました別のページがphpスクリプトを呼び出しているとき、他のページがjsonとして結果を自動的に解析できるようにするため

たとえば、私はtest.phpにあります:

_header('Content-type: application/json; charset=utf-8');
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr); // {"a":1,"b":2,"c":3,"d":4,"e":5}
_

そして私のmain.js

_function test() {
    $.ajax({
        url: 'test.php',
        type: 'GET',
        //dataType: 'html',
        success: function (response) {
            alert(response);
        }
    });
};
_

DataTypeを "json"に設定していない場合、またはtest.phpにヘッダーがない場合、アラートは文字列(typeof(response)で試行された)である_{"a":1,"b":2,"c":3,"d":4,"e":5}_を示し、これがある場合ヘッダー、またはdataType: "json"の場合、アラートから_[object Object]_を取得します。このヘッダー関数は、呼び出し側のページに、返されるデータのタイプを示すためにあり、その対処方法を知ることができます。 。私のスクリプトでは、header('Content-Type: application/json')がない場合、JavaScriptでの応答を次のように解析する必要があります:JSON.parse(response)それをjsonにするために、ヘッダー、私はすでにjsonオブジェクトを持っています、そしてそれをjSON.stringify(response)でhtmlに解析することができます。

9
naspy971

HTTP応答には常にContent-Typeを設定して、その応答で提供する内容を説明する必要があります。

それがJSONか他の何かであるかどうか、およびAJAX要求またはその他の種類の要求に対するものかどうか。


また、すべてのrequestContent-Typeを設定して、POSTペイロードを説明する必要があります。

1
SLaks

PHPでは、スクリプトで_Content-Type_ヘッダーを指定しない場合、デフォルトで設定したものにデフォルト設定されます default-mimetype が_php.ini_ファイルにあり、通常は_text/html_です。

header('Content-Type: application/json')を呼び出すと、デフォルトの設定が上書きされるため、スクリプトは、要求されたときに_Content-Type_で応答します。

また、_Content-type:application/json_ヘッダーを指定してcurlを呼び出す場合は、期待される応答ではなく、リクエストの本文にコンテンツタイプを指定します。

1
JoshA

コンテンツタイプのW3説明

Content-Typeフィールドの目的は、受信ユーザーエージェントが適切なエージェントまたはメカニズムを選択してユーザーにデータを提示したり、適切な方法でデータを処理したりできるように、本文に含まれるデータを十分に説明することです。

簡単に言えば、受信者に受信したデータの種類を通知し、それに応じて消費するだけです。

0