2012-12-31 61 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”)是什么;

我希望它不会是这样,但剑道迫使我相信。我更喜欢数据表,更多的自由,你可以定制更多。