2010-03-04 88 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