在Code背后执行JavaScript函数 - 如何获取代码背后的返回值

时间:2011-05-26 06:04:35

标签: c# javascript jquery asp.net

我有以下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

调用后立即将值从Javascript返回到代码后面

请注意我已尝试在HiddenField中设置值,但它不起作用。你可以在评论中看到。

任何想法或替代解决方案都将受到赞赏。

由于

3 个答案:

答案 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的值。