2013-03-04 41 views
10

我想指定dataType: 'json'与传统的jQuery $.ajax一样。 这可能与Angular.js $http.post

回答

4

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

转化请求和响应 请求和响应可使用变换函数进行变换。如果请求配置对象的数据属性包含一个对象,序列化到JSON格式

  • :默认情况下,角适用这些转变:

    请求转换。 响应变换:

  • 如果检测XSRF前缀,剥离它(见下面的安全考虑部分)

  • 如果检测JSON响应,反序列化使用JSON解析器

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

+5

问题在于服务器根据dataType响应HTML/XML/JSON。 URL总是相同的。 – Paul 2013-03-04 15:51:46

+1

@Paul你在谈论'Accept'标题。 – Musa 2013-03-04 15:54:10

+1

我在说'Content-type'在请求 – Paul 2013-03-04 16:12:51

19

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

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

好,我只在之前扩展评论。如果您要发送json对象作为服务器端的响应,则需要始终设置标头。正常的经典打印({id:11})可能会导致错误。安装标题的内容类型为json,应该可以正常工作。 Cya – daremachine 2013-05-22 21:14:26

+1

ARGGGGH老兄,你刚刚救了我的一天!我一直拉着我的头发,想知道为什么我的Node/Express4不会解析POST数据......事实证明,我必须在我的角$ http请求中加上头部内容类型......上帝该死! – Spock 2014-07-02 15:19:43

+0

由于是默认设置,因此不需要设置上述内容。请参阅:https://docs.angularjs.org/api/ng/service/$http#setting-http-headers。事实上,这有助于你,可能表明你的代码是将默认的标题设置到另一个值。 – 2017-04-21 18:19:02

3

我有同样的问题,responseType:'json'解决问题

可以使用的responseType:不是的dataType 'JSON': 'JSON'

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

     }); 

更多参考 https://docs.angularjs.org/api/ng/service/$http#methods_jsonp

+0

在https://docs.angularjs.org/api/ng/service/$http#usage中,reponseType会引导您访问https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-响应类型,使其听起来像服务器Content-Type的覆盖,注意:“当将responseType设置为特定值时,作者应确保服务器实际发送的响应与该格式兼容。如果服务器返回的数据与设置的responseType不兼容,则响应值将为空。“ – 2017-04-21 18:17:26