从.aspx向jquery ajax获取数据

本文关键字:获取 数据 ajax jquery aspx | 更新日期: 2023-09-27 18:25:06

我是jquery的新手,有一个问题:我有两个.aspx文件:其中一个包含脚本

<script type ="text/javascript">
    $(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        $.post("dataloader.aspx", {
            name: schemaName,
            key: key
        });
    });
</script>

它将参数发送到另一个页面"dataloader.aspx"。这里是"dataloader:aspx.cs"代码:

protected void Page_Load(object sender, EventArgs e)
        {
            Response.ContentType = "application/json";
            var schemaName = Request.Form["name"];
            var key = Request.Form["key"];
            Loader loader = ConnectionManager.getLoader();
            Dictionary<string, string> name_value = new Dictionary<string, string>();
            if (!string.IsNullOrEmpty(schemaName))
            {
                var schema = loader.GetSchema(schemaName);
                var qcontext = new SimpleLoader.BOService.QueryContext();
                qcontext.InitQueryContext();
                var element = loader.GetObjectByKey(schema, key);
                var viselems = element._Schema.GetVisibleElems(); 
                var cardElems = viselems.Where(x => !(x is SchemaElemDetail)).ToList();
                foreach (var elem in cardElems)
                {
                    var value = (element.GetValue(elem.Name) ?? "").ToString();
                    if (!string.IsNullOrEmpty(value))
                    {
                        name_value.Add(elem.Name, value);
                    }
                }
                Response.Write(name_value);
                Response.Flush();
                Response.End();
            }
        }

正如你们所看到的,我正在向字典中添加一些数据。我想通过jQuery将这本词典发送到"clientcard.aspx"客户端,但我不知道如何。。。你能帮我吗??我会非常感激的。

从.aspx向jquery ajax获取数据

一种方法是在dataloader.aspx中调用一个web方法。假设你的函数名称是getNameValue,在你的aspx页面中,你会有一个这样的web方法:(你基本上会把代码从Page_Load事件转移到这个)

[System.Web.Services.WebMethod]
public static Dictionary<string, string> getNameValue(string name, string keyN) 
{
  var schemaName = name;
  var key = keyN;
  Loader loader = ConnectionManager.getLoader();
  Dictionary<string, string> name_value = new Dictionary<string, string>();
  if (!string.IsNullOrEmpty(schemaName))
  {
    var schema = loader.GetSchema(schemaName);
    var qcontext = new SimpleLoader.BOService.QueryContext();
    qcontext.InitQueryContext();
    var element = loader.GetObjectByKey(schema, key);
    var viselems = element._Schema.GetVisibleElems(); 
    var cardElems = viselems.Where(x => !(x is SchemaElemDetail)).ToList();
    foreach (var elem in cardElems)
    {
      var value = (element.GetValue(elem.Name) ?? "").ToString();
      if (!string.IsNullOrEmpty(value))
      {
         name_value.Add(elem.Name, value);
      }
    }    
  }
  return name_value; //will be automatically serialised to JSON because of the dataType specification in ajax call.
}

您可以在ready中的jQuery中调用此函数,如下所示:

  $(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        //just in case
        var data = JSON.stringify({
            name: schemaName,
            keyN: key
        });
        $.ajax({
            type: "POST",
            url: "dataloader.aspx/getNameValue",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            error: function (xhr, status, error) {
                var msg = JSON.parse(xhr.responseText);
                alert(msg.Message);
            }
          }).done(function (msg) {
            //msg.d will contain your dictionary
          });
  });

使用这种方法更好的原因是代码可以重用。在您当前的设置中,如果您想获得name_value词典,则必须重新加载aspx页面。现在您所需要做的就是调用这个方法。

希望这能有所帮助!

最好从DataLoader.aspx页面转换为JSON。然后,在上面的代码段中添加一个回调:

  $.post("dataloader.aspx", {
        name: schemaName,
        key: key,
        success: function(d) { .. }
  });

变量"d"包含响应,该响应可能是字符串。然后,您可以以相同的方式使用JQuery将数据发送到下一页,方法是使用JSON.parse并解析内容,或者直接传递JSON。

为了创建所需的JSON,您需要序列化您的字典。您可以使用System.Web.Script.Serialization.JavaScriptSerializer:

var JSSerializer = new JavaScriptSerializer();
Response.Write(JSSerializer.Serialize(name_value));

然后在你的JS代码中:

$(document).ready(function () {
        var schemaName = GetURLParameters('schemaName');
        var key = GetURLParameters('key');
        $.post("dataloader.aspx", {
            name: schemaName,
            key: key
        }, function(data){
        //Here is your success callback and data should be your JSON.
        });
    });

为了更清晰,您可能需要考虑使用HTTP处理程序模板(.ashx)而不是.aspx页面,这样您就不会拥有aspx页面的全部内容(即代码隐藏和视图)。