如何在Angular.js $http.post中指定dataType:'json'?

Posted

技术标签:

【中文标题】如何在Angular.js $http.post中指定dataType:\'json\'?【英文标题】:How to specify dataType: 'json' in Angular.js $http.post?如何在Angular.js $http.post中指定dataType:'json'? 【发布时间】:2013-02-18 17:54:57 【问题描述】:

我想像传统的 jQuery $.ajax 一样指定 dataType: 'json'。 Angular.js $http.post 可以做到这一点吗?

【问题讨论】:

【参考方案1】:

您可以使用 HTTP Config 对象来设置标头:

$http(
    method: 'POST',
    url: 'somewhere.xyz',
    headers: 
        'Content-type': 'application/json'
    
)

【讨论】:

好,我之前只扩展评论。如果您从服务器端发送 json 对象作为响应,则需要始终设置标头。普通的经典 print(id: 11) 可能会引发错误。将标头内容类型设置为 json 并且应该可以正常工作。赛亚 ARGGGGH 老兄,你拯救了我的一天!我一直在想为什么我的 Node/Express4 不会解析 POST 数据……结果我不得不在我的角度 $http 请求中设置标题内容类型……该死的! 上面不需要设置,因为是默认的。见:docs.angularjs.org/api/ng/service/$http#setting-http-headers。这对您有所帮助的事实可能表明您的代码正在将默认标头设置为另一个值。【参考方案2】:

来自http://docs.angularjs.org/api/ng.$http

转换请求和响应 请求和响应都可以使用转换函数进行转换。默认情况下,Angular 会应用这些转换:

请求转换:

如果请求配置对象的 data 属性包含对象,则将其序列化为 JSON 格式。 响应转换:

如果检测到 XSRF 前缀,则删除它(请参阅下面的安全注意事项部分)

如果检测到 json 响应,则使用 JSON 解析器对其进行反序列化

所以不需要设置数据类型它是自动完成的

【讨论】:

问题是服务器响应 html/XML/JSON 取决于 dataType。 URL 始终相同。 @Paul 你在说Accept 标头吗? 我说的是Content-type请求中 @Paul 所以服务器读取请求内容类型来判断响应类型? @Paul FYI 当您将 dataType 设置为 'json' 而不是 Content-Type 标头时,jQuery 会设置 Accept 标头【参考方案3】:

我遇到了同样的问题,responseType:'json' 解决了这个问题

您可以使用 responseType:'json' 代替 dataType:'json'

var promise = $http(
            method: 'POST',
            url: 'somewhere.xyz',
            responseType:'json'

        );

供进一步参考 https://docs.angularjs.org/api/ng/service/$http#methods_jsonp

【讨论】:

In docs.angularjs.org/api/ng/service/$http#usage reponseType 将您定向到 developer.mozilla.org/en-US/docs/Web/API/… 这听起来像是对服务器 Content-Type 的覆盖,但要小心:“将 responseType 设置为特定值时,作者应确保表明服务器实际上正在发送与该格式兼容的响应。如果服务器返回的数据与设置的 responseType 不兼容,则 response 的值为 null。"

以上是关于如何在Angular.js $http.post中指定dataType:'json'?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular js中的http请求中发送标头数据

angular.js跨域post解决方案

Angular.js $http.post TypeError:无法读取未定义的属性“数据”

节点 js busboy 不使用 angular js $http post 发出事件

Angular JS - 无法使用 $http.post 接收任何响应

Angular JS 1.X 接口拿不到 http post 请求的数据