我从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;
背后的代码
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函数。但它并没有更新最新值。
<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;
这个问题有解决办法吗?是否建议每3秒从java脚本调用一个方法?或以任何其他方式在文本框中获取最新的数据表值?
答案 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()">