【问题标题】: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 可以做到这一点吗?

【问题讨论】:

    标签: ajax json angularjs


    【解决方案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

    【讨论】:

    猜你喜欢
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    相关资源
    最近更新 更多