2012-12-31 85 views
3

與劍道電網工作,我可以成功地使下面的代碼AJAX調用我的服務:如何獲得遠程JSON在ASP.NET

var serverData = { "ZoneParent": "123" }; 

     var request = $.ajax({ 
      type: "POST", 
      url: "/./Services/Reports.svc/getZones", 
      contentType: "application/json", 
      dataType: "json", 
      jsonp: null, 
      jsonpCallback: null, 
      data: JSON.stringify(serverData) 
     }); 


     request.done(function (msg) { 
      alert(JSON.stringify(msg)); 
     }); 

     request.fail(function (jqXHR, textStatus) { 
      alert("Request failed: " + textStatus); 
     }); 

然而,當我試圖實現與同一呼叫我的劍道格我得到一個錯誤

傳入的消息有一個意外的消息格式「原始」。用於操作的期望的消息格式是 'XML', '的Json'

爲getZones。我的服務呼叫做工精細用數據表,但我想切換到劍道可能。我已經搞砸了好幾天無濟於事。該應用程序不是MVC。這是我的劍道代碼片段:

var dataSource = new kendo.data.DataSource({ 

     transport: { 

      read: { 

       url: "/./Services/Reports.svc/getZones", 

       dataType: "JSON", 

       data: { zoneParent: "123" }, 

        type: "POST" 
      }, 

      parameterMap: function (data, operation) { 
        return kendo.stringify(data); 
       } 
     }, 

      schema: { 

       data: "d" 
      } 
    }); 

    var grid = $("#allGrids").kendoGrid({ 

     dataSource: dataSource, 

     height: 200 
    }); 

回答

5

由於cfeduke提出了類似的建議,你可以嘗試的contentType增加了運輸的讀取讀取對象,就像你在$就呼叫並未配置。

例如

var dataSource = new kendo.data.DataSource({ 

    transport: { 

     read: { 

      url: "/./Services/Reports.svc/getZones", 

      dataType: "json", 

      contentType: "application/json", 

      data: { zoneParent: "123" }, 

       type: "POST" 
     }, 

     parameterMap: function (data, operation) { 
       return kendo.stringify(data); 
      } 
    }, 
+0

感謝您的回答@cfeduke的解釋了。只需添加的contentType:「應用/ JSON」的伎倆。也感謝cfeduke。 – JamesRLamar

2

聽起來像服務器的回覆「內容類型」標題是預期的「應用程序/ JSON」以外的東西。

您可以使用cURL

curl -v -H "Content-type:application/json" -H "Accept:application/json" \ 
http://localhost/Services/Reports.svc/getZones 

調用端點和檢查返回的標頭值(-v表示詳細,你將看不到頭沒有它)。

有時候,只是設置了「接受:應用/ JSON的」頭就足以揭示問題 - 無論是在服務器強制轉換輸出爲JSON或它拋出,可以追查錯誤。

0

我在調查是否有其他解決方法。但是好像劍道有很大的侷限性,這是其中之一。 Datables不需要標題,只需要JSON格式。

這是你需要添加到您的控制器正在發送數據(如果它的Ajax調用)

標題(「內容類型:應用程序/ JSON」)是什麼;

我希望它不會是這樣,但劍道迫使我相信。我更喜歡數據表,更多的自由,你可以定製更多。