HTTP内容类型标头和JSON

2020/11/14 05:22 · javascript ·  · 0评论

为了避免未知,我一直试图避免使用大多数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

Content-Type头只是作为您的应用程序信息。浏览器不在乎它是什么。浏览器只是从AJAX调用返回数据。如果要将其解析为JSON,则需要自己完成。

标头在那里,因此您的应用程序可以检测到返回了什么数据以及应该如何处理它。您需要查看标头,application/json然后将其解析为JSON。

实际上,这就是jQuery的工作方式。如果您不告诉它如何处理结果,它将使用Content-Type来检测要如何处理结果。

Content-Type: application/json只是内容标题。内容标头只是有关返回数据类型的信息,例如:: JSON,image(png,jpg,..),html。

请记住,JavaScript中的JSON是数组或对象。如果要查看所有数据,请使用console.log而不是alert:

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

不要使用双引号。它将混淆JavaScript,因为JSON在每个值和键上都使用双引号:

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>

以下代码可帮助我在前端为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);
    });

最近,这个问题和Chrome扩展程序遇到了一个问题,当响应标头将内容类型标记为“ text / html”时,Chrome扩展程序破坏了JSON流,显然,扩展程序可以并且将使用响应标头更改内容,然后再进行进一步处理浏览器。更改内容类型可解决此问题。

本文地址:http://javascript.askforanswer.com/httpneirongleixingbiaotouhejson.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!