HTTP Content-Type Header and JSON

后端 未结 4 911
天涯浪人
天涯浪人 2020-11-30 20:23

I have always been trying to avoid using most of the HTTP protocol\'s properties for the sake of fear of the unknown.

However, I said to myself that I\'m going to fa

相关标签:
4条回答
  • 2020-11-30 20:59

    The below code helps me to return a JSON object for JavaScript on the front end

    My template code

    template_file.json

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

    Python backed code

    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")    
    

    File url.py

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

    jQuery code for the front end

      $.ajax({
            url:'{% url 'download_json-url' %}'        
        }).done(function(data){
            console.log('json ', data);
            console.log('Name', data.name);
            alert('hello ' + data.name);
        });
    
    0 讨论(0)
  • 2020-11-30 21:00

    Content-Type: application/json is just the content header. The content header is just information about the type of returned data, ex::JSON,image(png,jpg,etc..),html.

    Keep in mind, that JSON in JavaScript is an array or object. If you want to see all the data, use console.log instead of alert:

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

    If you want to alert the original JSON content as a string, then add single quotation marks ('):

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

    Do not use double quotes. It will confuse JavaScript, because JSON uses double quotes on each value and key:

    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>
    
    0 讨论(0)
  • 2020-11-30 21:01

    The Content-Type header is just used as info for your application. The browser doesn't care what it is. The browser just returns you the data from the AJAX call. If you want to parse it as JSON, you need to do that on your own.

    The header is there so your app can detect what data was returned and how it should handle it. You need to look at the header, and if it's application/json then parse it as JSON.

    This is actually how jQuery works. If you don't tell it what to do with the result, it uses the Content-Type to detect what to do with it.

    0 讨论(0)
  • 2020-11-30 21:08

    Recently ran into a problem with this and a Chrome extension that was corrupting a JSON stream when the response header labeled the content-type as 'text/html' apparently extensions can and will use the response header to alter the content prior to further processing by the browser. Changing the content-type fixed the issue.

    0 讨论(0)
提交回复
热议问题