asmx web服务,json,javascript / jquery?
我正在使用asmx从DB中检索一些数据,
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" });
如何在javascript中对测试对象进行去序列化? 还有更好的方法吗? 谢谢
我建议您查看我之前的答案以了解紧密的问题如何构建一个JSON对象以发送到AJAX WebService? 如果ContentType不是JSON,我可以从.asmx Web服务返回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 )
- 你的$ .ajax方法必须有一个“成功”处理程序( 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); } });