2

我正在使用一个简单的 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。

4

3 回答 3

1

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

dojo和jquery是一样的,都是基于js的,都是用xhr的。请考虑发布两者的确切请求信息。

于 2013-04-06T09:22:11.753 回答
1

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

我仍在研究如何以正确的方式修复它。

更新:我想我有一个答案,但不知道为什么它会修复它。如果我在 xhr 请求中设置 headers 值,如下所示,那么在 Firefox 中一切正常:

标头:{“内容类型”:“应用程序/json;charset=utf-8', '接受': '应用程序/json' }

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

于 2015-09-16T02:08:36.833 回答
0

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

我将 web api 与 asp.net mvc4 一起用于 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 问题,即不是客户端问题,而是服务器问题没有正确处理请求。

希望它对其他人有帮助。

于 2013-04-06T05:19:55.240 回答