我在我的网站上使用ajax从UserControl中调用一些名为NewsFeed.ascx的信息,该文件位于'controls'文件夹中,我的方法是创建一个 Web服务页面(在一个名为WebMethods的文件夹中),其中包含一个名为 GetRSSReader 的函数,它返回一个字符串格式:
[WebMethod]
public string GetRSSReader()
{
Page page = new Page();
UserControl ctl =
(UserControl)page.LoadControl("~/Controls/NewsFeed.ascx");
page.Controls.Add(ctl);
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();
}
然后我使用Jquery(我发现它太重了)来调用此页面以将返回的数据作为 JSON 获取,如下所示:
<div id="Content"></div>
<script type="text/javascript" defer="defer" src="../JAVA/Default.js"></script>
&GT;
$(document).ready(Update);
function Requests()
{
$.ajax({
type: "POST",
url: "../WebMethods/Feed.asmx/GetRSSReader",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$('#Content').html(msg.d);
}
});
}
Jquery.js和此页面(default.js)建立在 Java
文件夹中我的问题:还有什么比这种方式更好的。除此之外,当我有大量数据时,它不起作用,并且它不会读取网格视图工具。有什么建议 !? 10X
另一方面是否有网络服务的替代方案! (更快)
答案 0 :(得分:1)
虽然有一些较低级别的方法来完成你正在做的事情会减少一些开销,但听起来你的问题是“大量数据”,而不是WebService的开销。
您是否返回了新闻Feed的全部内容?难道你不愿意只返回改变了什么?一些逻辑似乎就是答案......
此外,没有真正的理由使用Web服务来执行此操作。只需将UserControl放在常规页面(aspx)中,然后使用GET查询调用它。您还可以使用通用Web处理程序(ashx)而不是具有较低开销的WebService。但这听起来并不像这里的问题。无论哪种方式,您都不需要打扰JSON。您正在获取HTML,只需获取它,然后直接使用它。
此外,不是返回完全呈现的HTML(不知道你的UserControl做了什么,很难知道如何优化它),只需返回数据,并使用jQuery或其他东西来产生输出。如果您不想在jQuery中构建模板,那么您可以在服务器上呈现默认/空模板,并在客户端上使用它来构建数据。
当然,这将是一些工作,但如果数据量是瓶颈,那将有所帮助。
答案 1 :(得分:0)
通常,WCF比Web服务更新,更快,更好。
但是在你的情况下,我非常怀疑你需要其中任何一个..如果我理解你的要求,你可以使用UpdatePanel
...用UpdatePanel
包裹控件并用客户端脚本触发它而不是调用你自己的AJAX请求。
UpdatePanel
在幕后使用自己的AJAX机制,我猜它已经尽可能优化了。
答案 2 :(得分:0)
您可以使用ASP.NET Callback API,它非常轻量级,您也可以发送JSON。
无论如何,为什么你说你的方式效率不高?您是通过此Web服务发送大量数据吗?
也许你需要传呼。