如何使用javascript从asp.net webservice中使用Json数据

How to consume Json data from asp.net webservice with javascript

本文关键字:Json 数据 webservice net 何使用 javascript asp      更新时间:2023-09-26

从前,有一个人在做一个项目。这个项目有一个母版页和一个内容页。内容页有一个下拉列表和两个文本框。然而,当该人从下拉列表中选择任何产品名称时,多么奇怪,它的totalQuantitypricePerItem值没有出现在文本框中!他试图为这个项目编写web服务代码和javascript代码,但不幸的是,它没有做他想要做的事情。因此,他请求你的帮助。

 public class QuantityAndPrice
{
    public string totalQuantity { get; set; }
    public string pricePerItem { get; set; }
}

webservice代码

  public class QuantityAndPriceService : System.Web.Services.WebService
{
    [WebMethod]
    public void GetQuantityAndPrice(string productName)
    {
        QuantityAndPrice quantityAndpriceObject = new QuantityAndPrice();
        string connect_string = "datasource=localhost;port=3306;username=root;password=root;";
        MySqlConnection connection = new MySqlConnection(connect_string);
        string query = "select totalQuantity,pricePerItem from smart_shop.inventory where name='" + productName + "';";
        MySqlCommand  cmd = new MySqlCommand(query, connection);
        connection.Open();
        MySqlDataReader   reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            quantityAndpriceObject.totalQuantity = reader.GetString("totalQuantity");
            quantityAndpriceObject.pricePerItem = reader.GetString("pricePerItem");
        }
        JavaScriptSerializer js = new JavaScriptSerializer(); 
       Context.Response.Write(js.Serialize(quantityAndpriceObject));

    }
}
javascript

 <script type="text/javascript">
        $(document).ready(function () {
            $('#productNameDDL').change(function () {
                var pName = $('#productNameDDL').val();
                $.ajax({
                    url: 'QuantityAndPriceService.asmx/GetQuantityAndPrice',
                    data: { productName: pName },
                    method: 'post',
                    dataType: 'json',
                    success: function (data) {
                        $('#tbxAvailableQuantity').val(data.totalQuantity);
                        $('#tbxPricePerItem').val(data.pricePerItem);
                    },
                    error: function (err) {
                        alert(err);
                    }
                });
            });
        });
    </script>

和这里的aspx代码

<div class="panel-body">
                <div class="row">
                    <div class="col-md-6"> 
                         <h6>&nbsp;&nbsp;Available Qty</h6>
                         <asp:TextBox ID="tbxAvailableQuantity" CssClass="form-control" ReadOnly="true" runat="server"></asp:TextBox>
                    </div>
                    <div class="col-md-6">
                         <h6>&nbsp;&nbsp;Price/Item</h6>
                          <asp:TextBox ID="tbxPricePerItem" CssClass="form-control" ReadOnly="true" runat="server"></asp:TextBox>
                    </div>
                </div> 
                <div class="row">
                    <div class="col-lg-6">
                         <h6>&nbsp;&nbsp;Sales Qty</h6>
                         <asp:TextBox ID="tbxSalesQtuantity" CssClass="form-control" runat="server"></asp:TextBox>
                    </div>
                    <div class="col-lg-6">
                         <h6>&nbsp;&nbsp;Total Price</h6>
                         <asp:TextBox ID="tbxTotalPrice" CssClass="form-control" runat="server"></asp:TextBox>
                    </div>
                </div>                 
            </div>


  <asp:DropDownList ID="productNameDDL" CssClass="form-control" runat="server"></asp:DropDownList>
  1. Web服务类应该有ScriptService属性。
  2. Web服务方法应该有ScriptMethod属性指定ResponseFormat = ResponseFormat.Json .
  3. 在java脚本中需要指定contentType: "application/json; charset=utf-8"dataType: 'json'
  4. ajax调用成功部分的结果包含在d中,例如data.d.totalQuantity
  5. ajax调用中的数据应该被字符串化,例如data:JSON.stringify({ productName: pName })

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class QuantityAndPriceService : WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public QuantityAndPrice GetQuantityAndPrice(string productName)
    {
        QuantityAndPrice quantityAndpriceObject = new QuantityAndPrice
        {
            totalQuantity = "totalQuantityValue",
            pricePerItem = "pricePerItemValue"
        };
        return quantityAndpriceObject;
    }
}
$.ajax({
    url: 'QuantityAndPriceService.asmx/GetQuantityAndPrice',
    data: JSON.stringify({ productName: pName }),
    method: 'post',
    contentType: "application/json; charset=utf-8",
    dataType: 'json',
    success: function (data) {
        $('#tbxAvailableQuantity').val(data.d.totalQuantity);
        $('#tbxPricePerItem').val(data.d.pricePerItem);
    },
    error: function (err) {
        alert(err.responseText);
    }
});