162

私は常に、未知のものへの恐怖から、HTTP プロトコルのほとんどのプロパティを使用しないように努めてきました。

しかし、今日は恐怖に立ち向かい、意図的にヘッダーを使い始めると自分に言い聞かせました。jsonブラウザにデータを送信してすぐに使用しようとしています。たとえば、準備完了状態 4 の Ajax ハンドラー関数があるとします。これは次のようになります。

function ajaxHandler(response){
    alert(response.text);
}

そして、PHP コードに content-type ヘッダーを設定しました。

header('Content-Type: application/json');
echo json_encode(array('text' => 'omrele'));

受信データがapplication/json.

4

5 に答える 5

147

ヘッダーは、アプリケーションのContent-Type情報としてのみ使用されます。ブラウザはそれが何であるかを気にしません。ブラウザーは、AJAX 呼び出しからデータを返すだけです。JSON として解析する場合は、自分で行う必要があります。

ヘッダーがあるので、アプリは返されたデータとその処理方法を検出できます。ヘッダーを確認する必要があり、そうであればapplication/jsonJSON として解析します。

これが実際にjQueryがどのように機能するかです。結果の処理方法を指定しない場合、 を使用して結果の処理方法Content-Typeを検出します。

于 2013-12-16T20:48:48.940 に答える
11

Content-Type: application/jsonコンテンツヘッダーのみです。コンテンツ ヘッダーは、返されるデータのタイプに関する情報にすぎません。例::JSON、画像 (png、jpg、など)、html。

JavaScript の JSON は配列またはオブジェクトであることに注意してください。すべてのデータを表示する場合は、alert の代わりに console.log を使用します。

alert(response.text); // Will alert "[object Object]" string
console.log(response.text); // Will log all data objects

元の JSON コンテンツを文字列として警告する場合は、一重引用符 (') を追加します。

echo "'" . json_encode(array('text' => 'omrele')) . "'";
// alert(response.text) will alert {"text":"omrele"}

二重引用符は使用しないでください。JSON は各値とキーに二重引用符を使用するため、JavaScript を混乱させます。

echo '<script>var returndata=';
echo '"' . json_encode(array('text' => 'omrele')) . '"';
echo ';</script>';

// It will return the wrong JavaScript code:
<script>var returndata="{"text":"omrele"}";</script>
于 2014-07-21T06:06:12.203 に答える
1

以下のコードは、フロント エンドで JavaScript の JSON オブジェクトを返すのに役立ちます。

私のテンプレートコード

template_file.json

{
    "name": "{{name}}"
}

Python でサポートされたコード

def download_json(request):
    print("Downloading JSON")
    # Response render a template as JSON object
    return HttpResponse(render_to_response("template_file.json",dict(name="Alex Vera")),content_type="application/json")    

ファイル url.py

url(r'^download_as_json/$', views.download_json, name='download_json-url')

フロントエンドの jQuery コード

  $.ajax({
        url:'{% url 'download_json-url' %}'        
    }).done(function(data){
        console.log('json ', data);
        console.log('Name', data.name);
        alert('hello ' + data.name);
    });
于 2016-03-04T21:22:53.930 に答える