从javascript以时间间隔调用C#方法

时间:2016-03-10 08:38:41

标签: javascript c# jquery asp.net json

我从javascript调用C#方法,它将返回一个Json字符串。我在文本框中编写JSON值。 C#方法将数据表转换为JSON。到目前为止,它的工作正常。



<script type="text/javascript">
        function initialize() {
   //returns "[{\"TAG1\":100,\"TAG2\":100}]" from method 
   var data = JSON.parse('<%=ConvertDataTabletoString()%>'); 
   $('#TextBox1').val(data[0].TAG1);
   $('#TextBox2').val(data[0].TAG2);
   }
    </script>
&#13;
&#13;
&#13;

背后的代码

public string ConvertDataTabletoString()
{
    string strcon = ConfigurationManager.ConnectionStrings["SqlCon"].ConnectionString;
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(strcon))
    {
        using (SqlCommand cmd = new SqlCommand(
          @"SELECT TOP 1 
                   DATATIME, 
                   TAG1,
                   TAG2 
              FROM DATATABLE1  
          ORDER BY 1 DESC", con))
        {
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            System.Web.Script.Serialization.JavaScriptSerializer serializer = 
              new System.Web.Script.Serialization.JavaScriptSerializer();

            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
            Dictionary<string, object> row;
            foreach (DataRow dr in dt.Rows)
            {
                row = new Dictionary<string, object>();
                foreach (DataColumn col in dt.Columns)
                {
                    row.Add(col.ColumnName, dr[col]);
                }
                rows.Add(row);
            }

            return serializer.Serialize(rows);
        }
    }
}

但我想在特定时间间隔(我的情况3秒)更新文本框值以获取文本框中的最新数据表值 所以尝试了setInterval函数。但它并没有更新最新值。

&#13;
&#13;
<script type="text/javascript">
        setInterval(function initialize() {
            //returns "[{\"TAG1\":100,\"TAG2\":100}]"     
            var data = JSON.parse('<%=ConvertDataTabletoString() %>');
            $('#TextBox1').val(data[0].TAG1);
            $('#TextBox2').val(data[0].TAG2);
        },1000);
    </script>
&#13;
&#13;
&#13;

这个问题有解决办法吗?是否建议每3秒从java脚本调用一个方法?或以任何其他方式在文本框中获取最新的数据表值?

1 个答案:

答案 0 :(得分:1)

将WebService(.asmx)添加到项目中。

然后将您的方法作为WebMethod添加到服务中:

namespace YourName.Space
{
 //Here is some auto-generated stuff like [WebService(Namespace = "http//tempuri.org")]
 public class MyWebsevice : System.Web.Services.WebService
 {
  [WebMethod]
  public string ConvertDataTabletoString()
  {
   // your stuff
  }
 }
}

在您的页面上注册Web服务:

<asp:ScriptManager ID="ScriptManager" runat="server">
 <Services>
  <asp:ServiceReference Path="~/MyWebsevice.asmx" />
 </Services>
</asp:ScriptManager>

从JS调用它:

<script type="text/javascript">
    $(document).ready(function(){
     setInterval(LoadMyData, 3000);
    });

    function LoadMyData() {
     YourName.Space.MyWebsevice.ConvertDataTabletoString(onSuccess, onFailure)
    }

    function onSuccess(result) {
     var data = JSON.parse(result);
     $('#TextBox1').val(data[0].TAG1);
     $('#TextBox2').val(data[0].TAG2);
    }

    function onFailure(result, userContext, methodName) {
     // do something if necessary.
    }
</script>

我希望它有所帮助。

编辑:而不是“$(document).ready()”使用OnLoad =“myOnLoadFunction()”

var var1;
function myOnLoadFunction(){
 var1= setInterval(LoadMyData, 3000);
}

致电<body onload="myOnLoadFunction()">