我正在尝试使用jQuery传递存储在ASP.NET页面的Session对象中的变量,以百分比形式表示在服务器上运行的进程的进度。
即:
Session['progress'] = 37;
我在这里看了一些答案;我的代码在这里正确使用了与问题相同的方法:
<head>
...
<script type="text/javascript">
function updateProgress() {
var progress = '<%Session["progress"].ToString();%>';
}
</script>
...
</head>
ASP.NET编译器返回NullPointerException
。我不确定这是否因为Session对象尚未实例化(因为这是在编译时发生的);或者Session对象可能没有正确接收变量(如果是这种情况,我该如何检查它呢?)
有什么想法吗?
我需要找到一些方法将这个值从服务器传递到客户端,以便为用户更新jQuery进度条。
谢谢!
答案 0 :(得分:3)
如果您想使用jQuery从页面中的会话变量获取实时更改数字,则需要进行某种类型的ajax请求。要访问会话状态中的值,可以编写函数[WebMethod]以将数据发送/发送回jQuery请求。
jQuery请求:
jQuery.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: '{}',
dataType: 'json',
url: 'Default .aspx/TestMethod',
success: function(result){
alert(result.d);
}
});
服务器页面WebMethod:
using System;
using System.Web.Services;
namespace JqueryAjaxText
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string TestMethod()
{
return Session["progress"].ToString();
}
}
}
答案 1 :(得分:2)
我认为你误解了事情发生的顺序。虽然SageNS发现了您的错误,但他没有解决您的问题。
您只需将代码写入javascript代码,用户就会看到:
<head>
...
<script type="text/javascript">
function updateProgress() {
var progress = '37';
}
</script>
...
</head>
对updateProgress()的连续调用将始终返回37。
如果要定期更新服务器的进度,则需要使用jQuery的.ajax()函数对服务器进行异步调用。
答案 2 :(得分:1)
您可以通过创建WCF服务并将$ .ajax()调用切换为GET而不是POST来构建Zachary的答案并更进一步。它不会是一个大的请求(不是POST那么大),但你也将使用正确的HTTP动词。 (POST用于插入; GET应该用于检索数据)。
您的jQuery调用可能如下所示:
jQuery.ajax({
type: 'GET',
dataType: 'json',
url: 'MyService.svc/GetServerProgress',
success: function(result){
alert(result.d);
});
然后,您将创建一个WCF服务并创建一个名为GetServerProgress的服务方法。
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetServerProgress")]
public int GetServerProgress()
{
return 37;
}
最后,您可能希望客户端使用一些JavaScript调用{.1}}到您的$ .ajax()方法,以便定期从WCF服务检索服务器的进度。
祝你好运!!答案 3 :(得分:0)
使用
<%=Session["progress"].ToString()%>
将数据输出到html页面