繁体   English   中英

AJAX用参数调用函数

[英]AJAX call a function with a parameter

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

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'"

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

您的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" }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM