ematica
ematica

Reputation: 51

Ajax call to [WebMethod] throws an exception

I am trying to send back SQL Server data as a JSON. At Button1 press an id is passed to a [WebMethod] from an Ajax Post in JSON form.

The jsonobject calls jsondb.mdf which exists with table: jsondata and columns idd, datetime, col1, col2 and col3 with data in them.

Default.aspx.cs

    [System.Web.Services.WebMethod]
    public static string GetJSONdata(string id1)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
        string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [idd]=@idd;";
        try
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
                {
                    conn.Open();
                    cmd.Parameters.AddWithValue("@idd", id1);
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        da.Fill(ds);
                        dt = ds.Tables[0];
                    }
                }
            }
        }
        catch (Exception ex)
        {
        }

        System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row;

        foreach (DataRow dr in dt.Rows)
        {
            row = new Dictionary<string, object>();

            foreach (DataColumn col in dt.Columns)
            {
                row.Add(col.ColumnName, dr[col]);
            }

            rows.Add(row);
        }

        var json2 = serializer.Serialize(rows);
        return json2;
    }

Default.aspx

<script type="text/javascript" src="~/Scripts/jquery-1.4.1.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $("#<%= Button1.ClientID %>").click(function () {
            var id = $("#<%= TextBox1.ClientID %>").val();
            var data = { ID:id };
            var json1 = JSON.stringify(data);
            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "Default.aspx/GetJSONdata",
                data: json1,
                dataType: "json",
                success: function (result) {
                    $("#<%= TextBox2.ClientID %>").val(result.ID);
                    $("#<%= TextBox3.ClientID %>").val(result.datetime);
                    $("#<%= TextBox4.ClientID %>").val(result.col1);
                    $("#<%= TextBox5.ClientID %>").val(result.col2);
                    $("#<%= TextBox6.ClientID %>").val(result.col3);
                },
                error: function (Msg) {
                    $("#<%= Label1.ClientID %>").text('failed:' + Msg.status +  '    response:' + Msg.responseText);

                }
            }); return false;
        });
    });

Error code:

failed:500 response:{"Message":"Invalid web service call, missing value for parameter: \u0027id1\u0027.","StackTrace":" at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary2 parameters)\r\n at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary2 parameters)\r\n at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

Upvotes: 0

Views: 1055

Answers (1)

Dhaval
Dhaval

Reputation: 2379

 type: "POST",
                    async: false,
                    url: "Default.aspx/GetJSONdata",
                    data: "{id1:id}",// Change Name As Per You WEBMETHOD 
                    contentType: "application/json; charset=utf-8",
                    datatype: "json",

//Do this Change Might it will Help You

1) Create Class

public class ABC
        {
            public string idd{ get; set; }
            public string datetime{ get; set; }
            public string col1{ get; set; }
            public string col2{ get; set; }
            public string col3{ get; set; }

        }

2)Create Webmethod

  [webmethod]
  public static ABC[] GetJSONdata(string id1)
        {
            MasterLogic ml = new MasterLogic();
             DataSet ds = new DataSet();
    DataTable dt = new DataTable();
    string connStr = ConfigurationManager.ConnectionStrings["jsonobject"].ConnectionString;
    string cmdStr = "SELECT ([idd],[datetime],[col1],[col2],[col3]) FROM [jsondata] WHERE [idd]=@idd;";
    try
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            using (SqlCommand cmd = new SqlCommand(cmdStr, conn))
            {
                conn.Open();
                cmd.Parameters.AddWithValue("@idd", id1);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                    dt = ds.Tables[0];
                }
            }
        }
    }
    catch (Exception ex)
    {
    }
            List<ABC> ProjectStatus = new List<ABC>();
            foreach (DataRow dr in dt.Rows)
            {
                ABC ps = new ABC();
              ps.id=Convert.ToInt32(dr["Columnname"]);
             // Do same To set value OF Properties
                ProjectStatus.Add(ps);

            }
            return ProjectStatus.ToArray();
        }

//Get Json on ASPX page

success: function (response) {
     for (var i = 0; i < response.d.length; i++) {
     //Write Your logic
    }
}

Upvotes: 1

Related Questions