从.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"客户端,但我不知道如何。。。你能帮我吗??我会非常感激的。
一种方法是在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
页面的全部内容(即代码隐藏和视图)。