我有以下JavaScript函数,它调用Jquery JSON函数并获取关于时区的DateTime。这很好。
<script type="text/javascript">
function JSFunctionName() {
$(document).ready(function () {
var timezone = "US/Central";
$.getJSON("http://json-time.appspot.com/time.json?tz=" + timezone + "&callback=?",
function (data) {
if (data.hour < 12) {
//alert(data.hour + ':' + data.minute); // want to return this value data.hour + data.minute
//document.getElementById('<%=HiddenField1.ClientID %>').value = data.hour + ':' + data.minute;// this does not work
}
})
});
}
</script>
现在我在按钮
的onclick上调用了这个Javascription函数<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
代码
protected void Button1_Click(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(this.GetType(),
"alert", "JSFunctionName();", true);
// here I need the DateTime value that is get from JSON
//Response.Write(HiddenField1.Value);
}
如何在Page.ClientScript.RegisterStartupScript
请注意我已尝试在HiddenField中设置值,但它不起作用。你可以在评论中看到。
任何想法或替代解决方案都将受到赞赏。
由于
答案 0 :(得分:1)
如果不回发到服务器,则无法执行此操作。原因是 javascript在客户端上执行,它只会在页面离开服务器后执行。
我认为这是一个人为的例子,但在这种特殊情况下,如果你想在客户端和服务器上提供相同的信息,你需要在服务器上计算它,并通过这对客户来说。
如果无法做到这一点,您需要创建一个Web服务,但必须异步处理响应。
答案 1 :(得分:0)
您可以使用javascript函数对服务器进行ajax调用,或者您可以在表单上放置另一个按钮,使用样式隐藏它,并在将计算值设置为JSFunctionName函数中的隐藏字段后单击此按钮。 / p>
答案 2 :(得分:0)
您的问题是以下一行:
Page.ClientScript.RegisterStartupScript(this.GetType(),
"alert", "JSFunctionName();", true);
实际上并没有“执行”Javascript功能。它只是添加了
JSFunctionName();
到脚本块中的页面,在代码完成后执行,页面已加载。
您可以将按钮的“OnClientClick”属性设置为“JSFunctionName()”,而不是从您的按钮单击事件中“调用Javascript”:
<asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" OnClientClick="JSFunctionName();" />
这将导致JSFunctionName在回发发生之前触发。然后,您可以设置JSFunctionName()方法,以便在完成后返回true,然后触发回发。
然后,您就可以从服务器端点击处理程序访问HiddenField1的值。