2010-03-04 86 views
3

我与标题的一个字符串属性(直接从OpenRasta社区文档的例子)家庭资源非常简单OpenRasta应用程序。openrasta XML请求返回的JSON

我已经建立了XML和JSON数据合同,这样的资源:

ResourceSpace.Has.ResourcesOfType<Home>() 
    .AtUri("/home") 
    .HandledBy<HomeHandler>() 
    .AsXmlDataContract() 
    .And.AsJsonDataContract(); 

从jQuery的,我能够获得JSON数据就好了。但是,当我创建一个jQuery XML Ajax请求时,我得到了JSON数据。

我的jQuery代码看起来是这样的:

$.ajax(
{ 
    url: "/home", 
    dataType: "xml", 
    success: function(result) { 
     $('#xmlSpan').append($(result).find('Title').text()); 
    }, 
    error: function(request, status, ex) { 
     $('#xmlSpan').append('error: '); 
     $('#xmlSpan').append(status + ', '); 
     $('#xmlSpan').append(ex.toString()); 
    } 
}); 

被附加的错误信息,最终看起来像这样:

错误:parsererror,类型错误:一个是空

但这里是有趣的部分。从小提琴手,我的要求是这样的:

GET http://127.0.0.1:51041/home HTTP/1.1 
Host: 127.0.0.1:51041 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 
Accept: application/xml, text/xml, */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
X-Requested-With: XMLHttpRequest 
Referer: http://ipv4.fiddler:51041/WebForm1.aspx 
Cache-Control: max-age=0 

...我的回答是这样的:

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/9.0.0.0 
Date: Thu, 04 Mar 2010 18:30:04 GMT 
X-AspNet-Version: 2.0.50727 
Content-Length: 18 
Cache-Control: private 
Content-Type: application/json; q=0.5 
Connection: Close 

{"Title":"Foooo!"} 

我的要求来作为“接受:应用程序/ XML”但响应“application/json”(并且返回的数据显然是json)。

我在做什么错?

回答

4

麦克,

(抱歉,我没有看到,quesiton之前)

你没有做错什么,而且这应该仅仅指刚罚款。

您接受:标头指定您的客户很乐意接收application/xml或其他任何内容(/)。 OpenRasta有可能假定“其他任何东西”都可以工作,并可以使用json编解码器。

如果你改变你的头

接受:应用/ XML,文本/ XML; Q = 0.9,/; Q = 0.8

然后你shoudl被罚款。或者,只是删除/产品总数/

这就是说,normaly /始终把为openrasta的内容协商algorythms最后的手段,所以这个结果是非常惊人的。你使用的是哪个版本的OR?

+0

,我会在这个星期看看这个。我刚刚从度假回来,并将第一次得到我的机会。感谢您的跟踪。 -Mike – kindohm 2010-03-29 01:25:40

+1

下面是我发现的... 我下载了OR(2.0.3214.437)的最新候选版本,但仍然存在相同的问题。 如你所说,我修改了我的jQuery。Ajax调用修改Accept头,然后一切都开始工作: beforeSend:功能(XHR){ xhr.setRequestHeader( '接受', '应用程序/ XML,文本/ XML') } 理想的情况下,我觉得jQuery开发人员不必担心修改标题以使其起作用。现在我知道解决方案很棒,但其他人可能会遇到这个问题。 – kindohm 2010-03-30 15:43:42

+2

你说得很对,接受标题应该根据我认为提交的内容类型自动设置。我将填写一份关于jQuery的错误报告,说明他们没有正确排列优先级。 – SerialSeb 2010-04-02 11:14:15