2016-03-10 2 views
1

Я вызываю метод C# из javascript, который возвращает строку Json. и я пишу значения JSON в текстовых полях. Метод C# преобразует таблицу данных в JSON. Пока он работает правильно.Вызов метода C# в интервале времени из javascript

<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>

код за

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сек) для получения последних DataTable значения в текстовых полях Так пытались 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>

Есть ли решение этой проблемы? Целесообразно ли вызывать метод из java-скрипта каждые 3 сек? или любым другим способом получить последнее значение таблицы данных в текстовом поле?

+5

* "Я звоню метод C# от javascript. "* Нет, это не так. Вы запускаете метод C# ** на сервере **, когда запрашивается страница, а затем позже, когда текст страницы (с выходом встроенного в нее метода) отправляется клиенту, браузер выполняет код JavaScript который читает текст, встроенный в страницу. –

+0

@ T.J.Crowder У вас возникла проблема. Каково возможное решение для его решения? – RJ10

+1

Создайте конечную точку и вызовите метод с помощью ajax, затем снова установите значения. Другое возможное решение, которое я честно не рекомендую, но я предполагаю, что вы используете WebForms, заключается в установке панели обновления и таймера на нем для обновления –

ответ

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 
    } 
} 
} 

Зарегистрируйте WebService на вашей странице:

<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> 

Я надеюсь, помогает.

Редактировать: Вместо "$ (документ) .ready()" использовать OnLoad = "myOnLoadFunction()"

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

вызов <body onload="myOnLoadFunction()">

+0

Значения не передаются в текстовые поля. Он показывает пустые значения., Нужно что-то изменить? – RJ10

+0

Вы отлаживали сервис и JS? –

+0

Веб-сервис возвращает правильное значение json. Но JS не получил его – RJ10

Смежные вопросы