简体   繁体   English

AJAX用参数调用函数

[英]AJAX call a function with a parameter

The following gives me a internal server error. 下面给了我一个内部服务器错误。

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

    })

This is the function that it is calling 这是它正在调用的函数

//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 Thank you guys for answering! 更新谢谢大家的回答! I think my problem might also be in my c# function. 我认为我的问题也可能出在我的C#函数中。 Am I doing anything wrong with the query statement @stateName part? 查询语句@stateName部分我做错了什么吗?

Because when I changed the query's last line to just 因为当我将查询的最后一行更改为

AND StoreAddreTbl.State = 'AL'"

It worked. 有效。 But when I pass the string whichState in there, it didn't proceed. 但是,当我在其中传递字符串whichState时,它没有继续。

Your JSON is invalid. 您的JSON无效。 You have it looking like this: 您看起来像这样:

{'AL'}

It should be looking similar to this: 它看起来应该与此类似:

{ "whichState": "AL" }

The proper way to do this in JavaScript: 在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);

    })

Notice on the data parameter, I'm using JSON.stringify . 请注意data参数,我正在使用JSON.stringify The JavaScript JSON.stringify function will automatically create your JSON string for you. JavaScript JSON.stringify函数将自动为您创建JSON字符串。

When sending the data, give it the key you expect to assign it to. 发送数据时,请给它提供您希望分配给它的密钥。 For example, you should be able to do: 例如,您应该能够:

data: { "whichState" : "AL" }

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

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