asmx web服务,json,javascript/jquery?
问题描述:
我使用ASMX来检索数据库的一些数据,asmx web服务,json,javascript/jquery?
public class TestPage1
{
public int UserID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
}
[WebMethod]
public EntityLayer.TestPage1 GetData(int id)
{
TestPage1 test = TestPage1.GetData(id).SingleOrDefault();
return test;
}
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "WebService.asmx/GetData",
data: "{id}",
dataType: "json"
});
我如何desrialize测试对象在JavaScript? 有没有更好的方法? 感谢
答
我建议你看看我以前的答案收盘问题How do I build a JSON object to send to an AJAX WebService?和Can I return JSON from an .asmx Web Service if the ContentType is not JSON?
正确的代码应该看起来像下面
[WebMethod]
[ScriptMethod (ResponseFormat = ResponseFormat.Json)]
public EntityLayer.TestPage1 GetData(int id)
{
TestPage1 test = TestPage1.GetData(id).SingleOrDefault();
return test;
}
和
var myData = 5;
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "WebService.asmx/GetData",
//data: {id:JSON.stringify(myData)},
data: JSON.stringify({id:myData}),
dataType: "json",
success: function(response){
alert("UserName=" + response.d.UserName +
", FirstName=" + response.d.FirstName +
", MiddleName=" + response.d.MiddleName+
", LastName=" + response.d.LastName);
}
})
其中JSON.stringify
是从脚本json2.js你可以从http://www.json.org/js.html下载功能。
如果id
值为整数JSON.stringify(myData)
与myData
相同,但对于所有更复杂的示例,我强烈建议您使用此函数。
如何从代码中看到web方法的所有结果将保存在属性d
中,因此您应该使用例如response.d.FirstName
语法来访问名字。
更新:在HTTP GET的情况下,data
参数应为{id:JSON.stringify(myData)}
。在HTTP POST的情况下:JSON.stringify({id:myData})
答
一对夫妇的事情...
- 你的Web服务必须以ScriptServiceAttribute标记,以允许返回JSON(http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptserviceattribute.aspx)
- 你的$就法必须有一个“成功“处理器(http://api.jquery.com/jQuery.ajax/)
- 返回的JavaScript对象将具有相同的属性名称为C#对象
- 一个好办法,看看在运输过程中的JSON序列化对象是使用Fiddler(http://www.fiddler2.com/fiddler2/)
一些未经测试示例代码:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "WebService.asmx/GetData",
data: "{id}",
dataType: "json"
success: function(data) {
var str = '' +
'UserName: ' + data.UserName + '\n' +
'Password: ' + data.Password + '\n' +
'FirstName: ' + data.FirstName + '\n' +
'LastName: ' + data.LastName + '\n' +
'MiddleName: ' + data.MiddleName;
alert(str);
}
});
任何人都想尝试这一点 - 不要忘记用[ScriptService]标记您的WebService类 - 只是有问题。 – kape123 2012-05-25 13:44:21