我已经阅读了这里的帖子并据我所知,但仍然无法让我的网络服务返回json。
网络服务,.Net 4.0
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class JsonWS : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string Sum()
{
string x = "1", y = "2";
return x + y;
}
}
这是我的jquery电话。
<script>
$(function () {
$('#btn_test').click(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://localhost/jsontest/JsonWS.asmx/Sum",
dataType: "json",
success: function (json) {
alert(json.d);
},
error: function () {
alert("Hit error fn!");
}
});
});
});
这个错误b / c Web服务正在返回...
<string xmlns="http://tempuri.org/">12</string>
感谢。
答案 0 :(得分:0)
你得到字符串,因为你返回一个字符串。你应该返回一个对象。 该对象将转换为JSon。
public class MyClassName
{
public string x { get; set }
public string y { get; set }
}
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
return new MyClassName { x = "1", y = "2" };
}
您也可以返回匿名类型。在这种情况下,您不需要对象MyClassName
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
return new { x = "1", y = "2" };
}
答案 1 :(得分:0)
无法使用跨域(jsonp)来处理Web服务,因此切换到.aspx页面并将逻辑放在Page_Load中,并带有Response.Write()。奇迹般有效。
对于刚开始做这类事情的人来说,请注意“回调=?” PARAM。另一个警告,Flushing和Closing your Response对于除Chrome之外的所有浏览器都是可以的,因为这会向浏览器发送响应,表明服务器已关闭该流。 Chrome处理方式不同。放手吧,你会没事的。