2013-04-05 23 views
2

我使用了一個簡單的Dojo XHR請求XML:道場/請求/ XHR返回,而不是JSON

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,但道場調用它表明: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

好的,發現它爲什麼會發生的問題,但不是根本原因。

我正在使用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問題,即不是客戶端問題,而是一個服務器問題,無法處理請求正確

希望它可以幫助其他人

1

服務器本身並不像這樣。使用螢火蟲檢查dojo和jquery在進行xhr時請求什麼。必須有一個參數告訴服務器它是dojo或jquery。更改該參數。

dojo和jquery是一樣的,它們基於js,它們都使用xhr。請考慮發佈兩者的確切請求信息。

1

修復服務器端工作,但這是一個創可貼解決方案。服務器對Accept頭中看到的內容做出正確響應。即使在Dojo xhr調用中指定'application/json',出於某種原因,Firefox會用'text/html,application/xhtml + xml,application/xml; q = 0.9,/; q = 0.8'替代它類似。結果.NET發回XML而不是JSON。在其他瀏覽器中不會發生。

我仍在看如何以正確的方式修復它。

更新:我想我有一個答案,但不知道它爲什麼修復它。如果我在xhr請求中設置標題值,如下所示,那麼一切在Firefox中都有效:

標題:{Content-Type':'application/json; 'charset = utf-8', 'Accept':'application/json' }

如果我使用雙引號,則這些標頭不會傳輸到服務器,而是返回XML。