AJAX调用带参数的函数

AJAX call a function with a parameter

本文关键字:函数 参数 调用 AJAX      更新时间:2023-09-26

下面给出了一个内部服务器错误。

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);
}

更新谢谢大家的回答!我认为我的问题也可能是在我的c#函数。我做了什么错误的查询语句@stateName部分?

因为当我把查询的最后一行改成
AND StoreAddreTbl.State = 'AL'"

它工作。但是当我传入字符串的时候,它没有继续

您的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字符串。

发送数据时,给它您期望分配给它的键。例如,您应该能够这样做:

data: { "whichState" : "AL" }