dojo / request / xhr返回xml而不是json

时间:2013-04-05 21:40:37

标签: dojo xmlhttprequest

我正在使用一个简单的dojo xhr请求:

require(["dojo/query", "dojo/on", "dojo/dom-style", "dojo/request/xhr", "dojo/domReady!"],
            function (query, on, domStyle, xhr) {

                xhr("api/products", {
                    handleAs: 'json'
                }).then(function (data) {
                    console.log('GOT DATA FROM DOJO XHR', data);
                }, function (err) {
                    console.log('ERROR FROM DOJO XHR', err);
                });
            }
        );

这很好用,但返回的数据是XML而不是JSON。

然而,jQuery中的相同调用以JSON格式返回数据。

当我查看标题时,对于jQuery调用它显示:Content-Type application/json; charset=utf-8,但对于dojo调用,它显示:Content-Type application/xml; charset=utf-8

我还补充说:

headers: { "Content-Type": "application/json; charset=uft-8" }

到xhr参数,但仍然没有运气,它仍然返回xml。

是什么给出的?你怎么告诉dojo xhr把它作为json处理?我正在使用dojo 1.8.3。

3 个答案:

答案 0 :(得分:1)

服务器本身并不像那样。使用firebug检查dojo和jquery在执行xhr时请求的内容。必须有一个param告诉服务器它是dojo或jquery。改变那个参数。

dojo和jquery是相同的,它们基于js并且它们都使用xhr。请考虑发布两者的确切请求信息。

答案 1 :(得分:1)

修复服务器端工作,但这是一个创可贴解决方案。服务器正确响应它在Accept标头中看到的内容。即使在Dojo xhr中调用你指定' application / json',出于某种原因,Firefox将其替换为&text; / text / html,application / xhtml + xml,application / xml; q = 0.9, / 的; q = 0.8'或类似的东西。因此,.NET发回XML而不是JSON。在其他浏览器中不会发生。

我仍然在考虑如何以正确的方式解决它。

更新:我想我有一个答案,但不确定为什么要修复它。如果我在xhr请求中设置标题值,如下所示,那么一切都可以在Firefox中使用:

标题:{     '内容类型':' application / json;字符集= UTF-8&#39 ;,     '接受':' application / json' }

如果我使用双引号,那么这些标题不会传输到服务器,而是返回XML。

答案 2 :(得分:0)

好的,找到了它为什么会发生的问题,而不是根本原因。

我正在使用带有asp.net mvc4的web api作为json服务。事实证明,对于dojo,服务返回xml但是对于jQuery,它返回json。

所以,如果它对其他任何人感兴趣,我是如何解决的,那就是在WebApiConfig中我删除了xml作为支持的返回类型:

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

由于我只对JSON感兴趣,这对我来说没问题,但如果你需要支持两者,那么你可能需要更深入了解。

因此,总而言之,问题并非真正的dojo xhr问题,即不是客户端问题,而是服务器问题无法正确处理请求。

希望它可以帮助其他人。