2010-08-10 158 views
1

我使用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? 有没有更好的方法? 感谢

回答

11

我建议你看看我以前的答案收盘问题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})

+1

任何人都想尝试这一点 - 不要忘记用[ScriptService]标记您的WebService类 - 只是有问题。 – kape123 2012-05-25 13:44:21

3

一对夫妇的事情...

一些未经测试示例代码:

$.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); 
    } 
});