我正在使用一个简单的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。
答案 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问题,即不是客户端问题,而是服务器问题无法正确处理请求。
希望它可以帮助其他人。