2014-11-17 4 views
0

Мне нужно обновить массив javascript каждый раз, когда есть и событие, например перехват кликов с помощью JQuery. Мне нужно, чтобы новое значение из массива JSP попало в массив javascript.Как обновить массив Javascript и массив JSP

Я знаю, что есть такие решения, как этот Passing array from .jsp to javascript function. Проблема совсем другая: код связан только один раз, когда мне нужно обновлять каждый раз, когда я перехватываю событие.

Я могу понять, что проблемы внутри перевода с сервлета на HTML, кажется: после того, как переменная Jsp принимает значение в первый раз, чем они стали «статическим кодом», и он не может измениться.

Не могли бы вы предложить мне альтернативу или решение?

function update_coordinate_javascript() 
{ 
    <% 
     for (int s: mycord.getXY()[0]) { 
    %> 
      xyscript.push(<% out.print(s); %>); 
    <% 
     } 
    %> 
} 

$("#myB").click(function(){ 
    $.ajax({ 
       type: "POST", 
       url: "readXY.jsp", // Some elaborations 
       data: {incrementa:true}, 
       dataType: "html", 
       success: function(msg) 
       { 
        alert("Ok"); 
       }, 
       error: function() 
       { 
        alert("Fail"); 
       } 
       }); 
      update_coordinate_javascript(); 
      return false; 
    }); 
} 

ответ

1

Вы не можете смешивать Javascript и JSP, как вы пытаетесь в функции update_coordinate_javascript, потому что Javascript работает на стороне клиента и JSP на стороне сервера.

Что вы делаете в этой функции, это печатать значения, которые JSP имеет в mycord в момент его запуска на стороне сервера. Вы печатаете их в функции Javascript (источник просмотра для подтверждения) и, таким образом, вы печатаете код Javascript в основном. И как только вы это сделали, у вас есть функция Javascript с жестко запрограммированным списком. Поэтому каждый раз, когда вы вызываете эту функцию, вы просто заполняете один и тот же жесткий список.

Вместо: СПЯ вы звоните в Ajax должны печати массив в ответ либо как JSON, XML или в виде строки с определенным характером зарезервирован для использования в качестве разделителя, и Javascript должен разобрать это.

$.ajax({ 
      type: "POST", 
      url: "readXY.jsp", //print array as JSON, XML, or CSV-like text there 
      data: {incrementa:true}, 
      dataType: "html", //change this to JSON, XML, or text as needed 
      success: function(msg) 
      { 
       //msg here is the response from the JSP you are calling, 
       //so whatever you print to response there 
       //is in this variable 
       alert("Ok"); 
       update_coordinate_javascript(msg); //parse the msg in there 
      }, 
      error: function() 
      { 
       alert("Fail"); 
      } 
      }); 

Тогда, очевидно, вам нужно взять код скриптлета JSP из update_coordinate_javascript и изменить его на Javascript код, который разбирает msg параметр, который передается. Как вы будете делать это будет зависеть от того, как вы решили форматировать вывод из JSP, который вы вызываете в Ajax (т. е. есть ли у вас возврат CSV-подобного текста, XML, HTML или JSON).

Так что, если вы идете с CSV, это может быть столь же просто, как:

function update_coordinate_javascript(msg) 
{ 
    var mycords = msg.split(","); 
    for(var i=0; i<mycords.length; i++) 
    { 
     xyscript.push(mycords[i]); 
    } 
} 
+0

Большое спасибо! Это был вопрос, и вы объясните, где проблема и какое возможное решение! Благодаря! Я надеюсь, что в будущем кто-то улучшит интеграцию между Javascript и JSP, разрешит обмен параметрами без разбора «bruteforce». – Gabrer

+1

@robott, на самом деле это то, что делает JSON (Javascript). – developerwjk

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