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

我有以下JavaScript函数,它调用Jquery JSON函数并获取关于时区的DateTime。 这很好用。

 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('').value = data.hour + ':' + data.minute;// this does not work } }) }); }  

现在我在onclick of button中调用了这个Javascription函数

  

代码背后

 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中设置值,但它不起作用。 你可以在评论中看到。

任何想法或替代解决方案将不胜感激。

谢谢

如果不回发到服务器,则无法执行此操作。 原因是javascript在客户端上执行 ,它只会在页面离开服务器后执行。

我认为这是一个人为的例子,但在这种特殊情况下,如果你想在客户端和服务器上获得相同的信息, 你需要在服务器上计算它 ,并将其传递给客户端。

如果无法做到这一点,您将需要创建一个Web服务,但必须异步处理响应。

您可以使用javascript函数对服务器进行ajax调用,或者您可以在表单上放置另一个按钮,将其隐藏为样式,并在将计算值设置为JSFunctionName函数中的隐藏字段后单击此按钮。

你的问题是以下几行:

 Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "JSFunctionName();", true); 

实际上并没有“执行”Javascriptfunction。 它只是添加了

 JSFunctionName(); 

到脚本块中的页面,在代码完成后执行,页面已加载。

您可以将按钮的“OnClientClick”属性设置为“JSFunctionName()”,而不是从按钮单击事件“调用Javascript”:

  

这将导致JSFunctionName在回发发生之前触发。 然后,您可以设置JSFunctionName()方法,以便在完成后返回true,然后触发回发。

然后,您将能够从服务器端单击处理程序访问HiddenField1的值。