0

誰かが私を正しい方向に向けることができるのだろうか.....私はちょうどjSONとc#で作業を始めたばかりで、チュートリアルに従って(いくつかのハックを含む)いくつかのデータをWebページに返しました。私が現在持っているのはこれです(略)。

ストアド プロシージャを呼び出す Web サービスを持つ asp.net ソリューション:

    [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 の例は、私のものとは異なって見えるからです。そして、もし私が間違った足を踏み入れているなら、私が取るべきステップについて誰かアドバイスをくれるでしょうか.

アドバイスありがとうございます。

クレイグ

4

2 に答える 2

0

ajax オプションの設定dataType: "json"は、サーバーからの JSON 応答を期待していることを jQuery に伝えます。サーバーから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>
于 2013-05-03T14:39:04.683 に答える
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");
}
于 2013-05-03T16:50:32.647 に答える