AJAX使用参数调用函数

时间:2015-07-16 20:53:20

标签: javascript c# asp.net ajax

以下内容给我一个内部服务器错误。

var jsonStateData;
    $.ajax({
        type: "POST",
        url: "functions.aspx/StateSalesDataString",
        data: '{' + 'AL' + '}',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            jsonStateData = $.parseJSON(data.d);
        }
    }).done(function () {
        console.log(jsonStateData);

    })

这是它正在调用的函数

//Returns stores sales datatable
[WebMethod]
public static string StateSalesDataString(string whichState)
{
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Dashboard_VWConnectionStringTest"].ConnectionString);
    conn.Open();

    string storeSalesQuery = "SELECT StoreSalesTbl.StoreNumb, Lat, Lng, TodayTotalSales, TodayTotalOrders, TodayTotalWebSales, TodayTotalCallSales, TodayTotalIFSales, TodayTotalStoreSales, TodayTotalWebOrders, TodayTotalCallOrders, TodayTotalIFOrders, TodayTotalStoreOrders " +
                             "From StoreSalesTbl INNER JOIN StoreAddreTbl " +
                             "ON StoreSalesTbl.StoreID = StoreAddreTbl.StoreID " +
                             "Where DatetimeTo IN (SELECT max(DatetimeTo) FROM StoreSalesTbl) " +
                             "AND StoreAddreTbl.State = @stateName";

    SqlCommand storeComm = new SqlCommand(storeSalesQuery, conn);
    storeComm.Parameters.AddWithValue("@stateName", whichState);

    storeComm.CommandType = CommandType.Text;
    // Create a DataAdapter to run the command and fill the DataTable
    SqlDataAdapter dataAdpt = new SqlDataAdapter();
    dataAdpt.SelectCommand = storeComm;
    DataTable storeDataTbl = new DataTable();
    dataAdpt.Fill(storeDataTbl);

    conn.Close();

    //convert the datatable to string
    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 storeDataTbl.Rows)
    {
        row = new Dictionary<string, object>();
        foreach (DataColumn col in storeDataTbl.Columns)
        {
            row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }
    return serializer.Serialize(rows);
}

UPDATE 谢谢你们回答!我想我的问题也可能出在我的c#函数中。我在查询语句@stateName part?

上做错了什么

因为当我将查询的最后一行更改为

AND StoreAddreTbl.State = 'AL'"

有效。但是当我在那里传递字符串whichState时,它没有继续。

2 个答案:

答案 0 :(得分:1)

您的JSON无效。你看起来像这样:

{'AL'}

应该看起来与此相似:

{ "whichState": "AL" }

在JavaScript中执行此操作的正确方法:

var myData = {};
myData.whichState = 'AL';

var jsonStateData;
    $.ajax({
        type: "POST",
        url: "functions.aspx/StateSalesDataString",
        data: JSON.stringify(myData),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            jsonStateData = $.parseJSON(data.d);
        }
    }).done(function () {
        console.log(jsonStateData);

    })

注意data参数,我正在使用JSON.stringify。 JavaScript JSON.stringify函数会自动为您创建JSON字符串。

答案 1 :(得分:0)

发送数据时,请为其指定要分配的密钥。例如,您应该能够:

data: { "whichState" : "AL" }