Jquery - 尝试将数据发送到Ajax,但数据为空

时间:2017-08-05 16:58:59

标签: javascript c# jquery asp.net ajax

有使用Jquery Ajax从数据库获取名称的函数。这个函数有输入参数,我在下面的代码中得到它:

var value = $(this).parent().find(":checkbox").val();
var typeSelect = GetLayerGeometries(value);

然后将值发送到ajax函数:

Ajax功能

function GetLayerGeometries(LayerName) {
    var data;
    $.ajax({
        url: 'GetLayerGeometries.aspx/GetLayerGeometry',
        data: '{"LayerName":"' + LayerName + '"}',
        async: false,
        success: function (resp) {
            data = resp;
            callback.call(data);
        },
        error: function () { }
    });
    return data;
}

C#功能:

protected void Page_Load(object sender, EventArgs e)
{
    string test = Request.Form["LayerName"];
    GetLayerGeometry(Request.Form["LayerName"]);
}

public void GetLayerGeometry(string LayerName)
{
    WebReference.MyWebService map = new WebReference.MyWebService();
    string Name = map.GetLayerGeometries(LayerName);

    if (Name != null)
        Response.Write(Name);            
}

我的问题: LayerName为空。

我使用this link并测试所有方法,但LayerName仍为空。

3 个答案:

答案 0 :(得分:1)

function GetLayerGeometries(LayerName) {
    var data;
    $.ajax({
        url: 'GetLayerGeometries.aspx/GetLayerGeometry',
        data: {"LayerName":LayerName},
        async: false,
        success: function (resp) {
            data = resp.d;
            callback.call(data);
        },
        error: function () { }
    });
    return data;
}

[WebMethod]
public static string GetLayerGeometry(string LayerName)
{
    return LayerName
}

您需要像上述方法一样使用网络方法。

答案 1 :(得分:0)

问题是,您正在尝试解析请求正文,就好像它是表单编码的那样,而不是。您已使用JSON传递数据,因此您需要适当地解析它。

在C#中使用以下内容,使用Json.NET从JSON读取请求变量:

protected void Page_Load(object sender, EventArgs e)
{
    string requestBody = StreamReader(Request.InputStream).ReadToEnd();
    dynamic parsedBody = JsonConvert.DeserializeObject(requestBody);
    string test = parsedBody.LayerName;
}

答案 2 :(得分:0)

您需要对值进行字符串化然后发送,它才能正常工作

function GetLayerGeometries(LayerName) {
    var data;
    $.ajax({
        url: 'GetLayerGeometries.aspx/GetLayerGeometry',
        data: { LayerName: JSON.stringify(LayerName) }, // make this change
        async: false,
        success: function (resp) {
            data = resp;
            callback.call(data);
        },
        error: function () { }
    });
    return data;
}