使用json和数据

时间:2013-05-03 14:31:36

标签: jquery asp.net ajax json

我想知道是否有人能指出我正确的方向.....我刚刚开始使用jSON和c#并且已经按照教程(有几个黑客)将一些数据返回到网页。我现在拥有的是这个(缩写)。

一个asp.net解决方案,它有一个调用存储过程的Web服务:

    [WebMethod]
    public string ReadRegion()
    {
        DataSet myDS = getInterests();
        StringBuilder sb = new StringBuilder();
        DataTable myVenues = myDS.Tables[0];
        if (myVenues.Rows.Count > 0)
        {
            foreach (DataRow myVenueRow in myVenues.Rows)
            {
                sb.Append(myVenueRow["descript"].ToString().TrimEnd() + "<br/>");
            }
        }
        else
        {
            sb.Append("No Records Found");
        }
        return sb.ToString();
    }

在这个解决方案中,我还有一个aspx页面,其中包含以下内容:

<script type = "text/javascript">
    function ShowRegionsInfo() {
        var pageUrl = '<%=ResolveUrl("~/WebService/wsJQueryDBCall.asmx")%>'

        $.ajax({
            type: "POST",
            url: pageUrl + "/ReadRegion",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccessCall,
            error: OnErrorCall
        });
    }

    function OnSuccessCall(response) {
        $('#<%=lblOutput.ClientID%>').html(response.d);
    }

    function OnErrorCall(response) {
        alert(response.status + " " + response.statusText);
    }
</script>

代码工作正如我在页面上获得描述(离子)列表。但是我希望在返回的记录集中包含一系列行,最后我希望能够从客户端动态过滤结果。

所以我的问题是 我是从错误的脚开始的吗?我是否以正确的格式将数据返回到页面。因为所有其他jSon示例,说实话,看起来与我的不同!如果我走错了路,任何人都可以就我应该采取的步骤给出一些建议。

感谢您提供的任何建议!

克雷格

2 个答案:

答案 0 :(得分:0)

在ajax选项中设置dataType: "json"告诉jQuery您期望从服务器获得JSON响应。您只是从服务器返回html(这是默认设置),因此请删除该行。

此外,在您的OnSuccessCall()方法中,您可以将response.d更改为response

<script type = "text/javascript">
    function ShowRegionsInfo() {
        var pageUrl = '<%=ResolveUrl("~/WebService/wsJQueryDBCall.asmx")%>'

        $.ajax({
            type: "POST",
            url: pageUrl + "/ReadRegion",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            success: OnSuccessCall,
            error: OnErrorCall
        });
    }

    function OnSuccessCall(response) {
        $('#<%=lblOutput.ClientID%>').html(response);
    }

    function OnErrorCall(response) {
        alert(response.status + " " + response.statusText);
    }
</script>

答案 1 :(得分:0)

  

如果您从 aspx.cs 文件 调用特定方法

aspx 页面中,使用以下脚本

$('#<%= ddlItemCatogory.ClientID%>').change(function () {
            var catId = this.value;
            $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("loading ... ", "0");
            $("#phMainContent_ctl00_ddlItem").resetSS();
            $.ajax({
                type: "POST",
                url: "handler/PopulateAjaxData.aspx/GetItem",
                data: "{'catId':'" + catId.toString() + "'}",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                success: function (data) {
                    if (data.d.length > 0) {
                        $('#<%= ddlItem.ClientID%>').get(0).options.length = 0;
                        $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("Select Item", "0");
                        $.each(data.d, function (index, item) {
                            $('#<%= ddlItem.ClientID%>').get(0).options[$('#<%= ddlItem.ClientID%>').get(0).options.length] = new Option(item.Display, item.Value);
                        });
                    }
                    else {
                        $('#<%= ddlItem.ClientID%>').get(0).options.length = 0;
                        $('#<%= ddlItem.ClientID%>').get(0).options[0] = new Option("No Item found", "0");
                    }
                    $("#phMainContent_ctl00_ddlItem").resetSS();
                },
                error: function () {
                    alert("Failed to load Item");
                }
            });
        });

PopulateAjaxData.aspx.cs 中的代码

    [WebMethod]
    public static ArrayList GetItem(string catId)
    {
        ArrayList list = new ArrayList();
        PopulateAjaxData item = new PopulateAjaxData();
        List<DataModels.Items> items = item.loadItem(int.Parse(catId));

        foreach (DataModels.Items i in items)
        {
            list.Add(new { Value = i.Id.ToString(), Display = i.Name });
        }

        return list;
    }
  

如果您拨打 aspx.cs 文件,请使用以下代码...

在.aspx页面中使用以下代码

  function addToCart() {
        var vehicleId = $('#<%= VehicleId.ClientID%>').val();
        var parameter = "vehicleId=" + vehicleId;

        $.ajax({
            type: "POST",
            url: "handler/AddToCart.aspx?" + parameter,
            success: function (msg) {

                if (msg == "1") {
                    $('#message').html('Vehicle has been added to Cart.');
                }
                else {
                    $('#message').html('Vehicle can not be added at this moment.');
                }
            }
        });
    }

aspx.cs 加载事件使用以下代码

protected void Page_Load(object sender, EventArgs e)
{
    string vehicleId = Request.Params["vehicleId"] ?? "";
    string productId = Request.Params["productId"] ?? "";
    string message = string.Empty;
    int CartId = 0;


    if (Request.Cookies["CartId"] == null)
    {
        if (CartId == 0)
        {
           DataModels.Cart cart = new DataModels.Cart();
           cart.CreatedAt = DateTime.Now;

            try
            {
                cart = Service.Create(cart);
                if (cart.Id > 0)
                {
                    HttpCookie objCookie = new HttpCookie("CartId");
                    objCookie.Value = cart.Id.ToString();
                    objCookie.Expires = DateTime.Now.AddDays(1);
                    Response.Cookies.Add(objCookie);
                    CartId = cart.Id;
                }
            }
            catch (Exception ex)
            {
                message = ex.Message;
                Response.Write("-1");
            }
        }
    }
    else
    {
        CartId = int.Parse(Request.Cookies["CartId"].Value);
    }

    DataModels.CartItem cv_new = new DataModels.CartItem();
    if (CartId > 0 && !(string.IsNullOrEmpty(vehicleId)))
    {
        DataModels.CartItem cv = Service.ReadCartByVehicleId(CartId, int.Parse(vehicleId));

        if (cv == null)
        {
            cv_new.Cart = Service.ReadCart(CartId);
            cv_new.Vehicle = Service.ReadVehicle(int.Parse(vehicleId));
            cv_new.Product = null;
            cv_new = Service.Create(cv_new);
        }
    }
    else if (CartId > 0 && !(string.IsNullOrEmpty(productId)))
    {
        DataModels.CartItem cv = Service.ReadCartByProductId(CartId, int.Parse(productId));

        if (cv == null)
        {
            cv_new.Cart = Service.ReadCart(CartId);
            cv_new.Vehicle = null;
            cv_new.Product = Service.ReadProduct(int.Parse(productId));
            cv_new = Service.Create(cv_new);
        }
    }


    Response.Write("1");
}