ajax aspx调用webservice,返回json

1,创建一个asp.net网站

2.创建一个student类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Student 的摘要说明
/// </summary>
public class Student
{
    public Student()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }
    public int Id { get; set; }
    public String  Name { get; set; }
    public int Age { get; set; }

}
View Code

 

 3,创建一个webservice;(添加引用-web服务)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

/// <summary>
/// WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    public WebService () {

        //如果使用设计的组件,请取消注释以下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]  //ajax调用时加上这句话
    public List<Student> getStudents() {
        //Student s = new Student() {Id= 1,Name= "sa",Age= 18 };
        List<Student> list = new List<Student>() {
            new Student(){ Id= 1,Name= "zhangsna",Age= 19},
            new Student(){Id=2,Name="lisi",Age=23},
            new Student(){Id =3,Name="hehe",Age=32}
        };
        return list;
    }
    [WebMethod]
    public Student getStudent()
    {
        Student s = new Student() {Id= 1,Name= "sa",Age= 18 };
        
        return s;
    }
}
View Code


4,创建一个html页面,ajax调用

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="../Scripts/jquery-1.8.2.min.js"></script>
    <script src="../Scripts/jquery-1.8.2.intellisense.js"></script>
    <script type="text/javascript">
        $(function () {
            //1,请求一个字符串hello world
            //$.ajax({
            //    url: "/WebService.asmx/HelloWorld",
            //    datatype:
            //});
            //$.post(
            //    "/WebService.asmx/HelloWorld",
            //    {},
            //    function (data) {
            //        alert($(data).text());
            //    }
            //    );

           //2,请求getStudents方法
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf8",
                url: "/WebService.asmx/getStudents",
                dataType: "json",
                success: successCallback,
                error:errorCallback
            });
            function successCallback(data) {
                for (var i = 0; i < data.d.length; i++) {
                    alert(data.d[i].Name + data.d[i].__type);
                }
            }
            function errorCallback(XMLHttpRequest, status, errorThrown) {
                alert(status + errorThrown);
            }
            //3,$.post $.get请求,没有成功;原因contengtype无法设置
            //$.post(
            //    "/WebService.asmx/getStudents",
            //    { "contentType": "application/json; charset=utf-8" },
            //    function (data, status, jqxht) {
            //        alert(jqxht);
            //        alert(status);
            //        for (var i = 0; i < data.d.length; i++) {
            //                    alert(data.d[i].Name);
            //        }
            //    }, "script"
            //);
        });
    </script>
</head>
<body>

</body>
</html>

5,创建一个aspx页面,调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ServiceReference;
using t74webservice;
public partial class webservice_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        t74webservice.WebServiceSoapClient ws = new t74webservice.WebServiceSoapClient();
        //ws.HelloWorld()
        t74webservice.Student s=ws.getStudent();
        Response.Write(s.Age);
    }
}

ok,以上是今天所学内容,两种调用webservice方法;

总结:1,ajax调用:

    a,方法加上特性[scriptMethod(ResponseFormat=ResponseFormat.Json,UserHttpGet=true)]   //true/flase get请求

    (需要引用命名空间 system.Web.Script.Services;);

    b,只能使用$.ajax调用,设置contentType:"application/json;charset=utf-8";

      $.post与$.get不能调用的原因是:无法设置contentType,使其请求为json格式;   待以后处理----

    c,前台使用时:data.d[i].Name; 原因-->返回的json为:{“d”:[{},{}]};

      

function successCallback(data) {
                for (var i = 0; i < data.d.length; i++) {
                    alert(data.d[i].Name + data.d[i].__type);
                }
            }

2,aspx 调用

引用web服务---》输入地址(或发现解决方案服务)

引用命名空间---new----调用方法---ok;

posted @ 2013-08-28 22:52  Zhangxueliang  阅读(2102)  评论(0编辑  收藏  举报