ASMX Web服务,JSON的JavaScript / jQuery的?ASMX Web服务,JS

2019-05-12 12:38发布

我使用ASMX来检索数据库的一些数据,

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? 并有更好的办法? 谢谢

Answer 1:

我建议你看看我以前的答案关闭问题如何建立一个JSON对象发送到一个AJAX web服务? 并且我可以从一个的.asmx Web服务返回JSON如果将contentType不是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的情况下获得data的参数应该是{id:JSON.stringify(myData)} 。 在HTTP POST的情况下: JSON.stringify({id:myData})



Answer 2:

一对夫妇的事情...

  • 您的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);
  }
});


文章来源: asmx web service, json, javascript/jquery?