我正在使用.Net framework 2.0 / jQuery对2.0 Web服务进行Ajax调用。无论我在ajax调用中将contentType设置为什么,该服务始终返回XML。我希望它返回Json!
这里是电话:
$(document).ready(function() { $.ajax({ type: "POST", url: "DonationsService.asmx/GetDate", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Hide the fake progress indicator graphic. $('#RSSContent').removeClass('loading'); // Insert the returned HTML into the <div>. $('#RSSContent').html(msg.d); } }); });
这是Fiddler中请求标头的样子:
POST /DonationsService.asmx/GetDate HTTP/1.1 x-requested-with: XMLHttpRequest Accept-Language: en-us Referer: http://localhost:1238/text.htm Accept: application/json, text/javascript, */* Content-Type: application/json; charset=utf-8 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; eMusic DLM/4; .NET CLR 2.0.50727) Host: localhost:1238 Content-Length: 2 Connection: Keep-Alive Pragma: no-cache
我尝试将contentType设置为’text / json’并获得相同的结果。
这是Web服务方法:
<WebMethod()> _ Public Function GetDate() As String 'just playing around with Newtonsoft.Json Dim sb As New StringBuilder Dim sw As New IO.StringWriter(sb) Dim strOut As String = String.Empty Using jw As New JsonTextWriter(sw) With jw .WriteStartObject() .WritePropertyName("DateTime") .WriteValue(DateTime.Now.ToString) .WriteEndObject() End With strOut = sw.ToString End Using Return strOut End Function
这是它返回的内容:
<?xml version="1.0" encoding="utf-8"?> <string xmlns="http://DMS.Webservices.org/">{"DateTime":"11/13/2008 6:04:22 PM"}</string>
有人知道我要Json时如何强制Web服务返回Json吗?
请不要告诉我升级到.Net Framework 3.5或类似的东西(我不是那么愚蠢)。我需要一个2.0解决方案。
从ASP.NET 2.0中的ASMX服务返回JSON没问题。您只需要安装ASP.NET AJAX扩展。
确保将[ScriptService]装饰添加到Web服务。这就是指示ASP.NET AJAX框架的服务器端部分返回JSON的形式正确的请求。
另外,如果在2.0中使用,则需要从示例“ msg.d”中删除“ .d”。 “ .d”是3.5附带的安全功能。