我知道我不是第一个遇到这个问题的人,但是我似乎找不到有效的解决方案
使用网络服务集返回json时,.net仍将其包装在XML包装器中。
我搜索并尝试了很多东西
发生的情况非常令人困惑,在IE中,至少在我的devbox上,响应作为xml文档返回,在这里我可以使用msg.text并轻松获取json字符串,但是在生产环境中我在FF中进行了测试,并且返回为文档,没有“文本”属性。
这是我的javascript / jquery
$.ajax({ error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status+'-'+xhr.statusText); alert(thrownError); }, url: '<%=ResolveUrl("~/WebService.asmx")%>' + "/JackJill", contentType: "application/json", success: function (msg) { alert(msg.d); } });
所以:我怎么能简单地要求.net返回一个有效的常规json字符串,而不是将其包装。我相信这将解决所有问题。这也将使我的服务更容易为全世界所用,因此他们不必进行任何特殊的分析。
非常感谢您的任何建议或指点
真诚地
编辑: 这是我刚刚测试的示例Web服务:
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)> <WebMethod()> Public Function JackJill() As String Return "[{""Name"":""Jack""},{""Name"":""Jill""}]" End Function
然后当我把它放在浏览器中
http:// localhost:81 / webservice.asmx / JackJill
我得到
<?xml version="1.0" encoding="utf-8" ?> <string xmlns="http://tempuri.org/"> [{"Name":"Jack"},{"Name":"Jill"}] </string>
为什么这里所有这些xml东西?
我知道这个问题很旧,但以防万一将来有人在看这个答案。
我已经发现(根据此http://encosia.com/asmx-and-json-common-mistakes-and- misconceptions/和此http://weblogs.asp.net/scottgu/archive/2007/04/04 /json- hijacking-and-how-asp-net-ajax-1-0-mitigates-these- attacks.aspx),如果您希望从.ASMX中使用JSON,则必须:
在Yisman之上,他说他不想将其服务限制为POST请求,但是(根据这两个引用)看来,如果您希望使用.ASMX并接收JSON,这就是您必须要做的。