Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Не передаются на страницу параметры в формате json / 18 сообщений из 18, страница 1 из 1
19.01.2011, 17:04:20
    #37067347
Pablo_new
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Есть страница по нажатию кнопки вызывается функция "OnFunc()" которая с помощью JQuery+Ajax вызывают сервлет, и передают ему параметры. В зависимости от параметров выполняется какой то код и возращает сформированные данные в формате json. Проблема в следующем: сервлет вызывается, парметры получает, данные формируются и отправляются на страницу, но на страницу не приезжают. не могу понять почему?
Кусок код на JSP страницы:
1) Вариант:
<script type="text/javascript">
function OnFunc(){
$var1=1;
$.post("Servlet1", {var1:$var1}, function(data){
alert('test');
},"json");
}
</script>
2) Вариант:
<script type="text/javascript">
function OnFunc(){
$var1=1;
$.getJSON("Servlet1",{var1:$var1}, function(data){
alert('test');
});
}
</script>

Код сервлета:
...
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("{result:true}");
out.flush();
out.close();
...

Как уже писал, сервлет вызывается и выполняется без исключений, но alert на странице не вызывается
...
Рейтинг: 0 / 0
19.01.2011, 17:06:20
    #37067357
Pablo_new
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
забыл написать через $.post в формате html и xml данные передаются без проблем
...
Рейтинг: 0 / 0
19.01.2011, 17:10:41
    #37067372
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Pablo_new,

ставим FireBug и смотрим что же на самом деле приходит обратно.
...
Рейтинг: 0 / 0
19.01.2011, 17:27:20
    #37067430
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Ну первое, что бросается в глаза - зачем вы выставляете contentType?
Далее, есть вероятность, что вы неправильно сформировали json на стороне сервера, ответит приходит, не может отпарсится jQuery, вылетает эксепшн -> в колбак вы не попадаете. Проверяется это так:
1) Ставите FireBug иди TCPMon (если у вас не мозилла);
2) Смотрите что приходит в респонсе, копируете
3) Вставляете в http://www.jsonlint.com/ и смотрите валидный он или нет.
...
Рейтинг: 0 / 0
19.01.2011, 17:28:48
    #37067436
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Не завметил ваш пример. Так и есть, JSON не валидный. Передавайте { " result " :true}
...
Рейтинг: 0 / 0
19.01.2011, 18:00:01
    #37067529
Pablo_new
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
svenomНе завметил ваш пример. Так и есть, JSON не валидный. Передавайте { " result " :true}
Спасибо вы оказались совершенно правы заворочалось )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
12.06.2012, 00:50:19
    #37834856
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Здравствуйте. Помогите мне, пожалуйста. Делаю по примеру
Код: javascript
1.
2.
3.
4.
5.
$.getJSON('catalog?foo=bar', function(data) {
    alert('Success: ' + data.success + '\n'
        + 'Message: ' + data.message + '\n'
        + 'Param: ' + data.param);
});


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
Map<String, Object> data = new HashMap<String, Object>();
		    data.put("success", true);
		    data.put("message", "Hello World!");
		    data.put("param", request.getParameter("foo"));
		     
		    // Write response data as JSON.
		    response.setContentType("application/json");
		    response.setCharacterEncoding("UTF-8");
		    response.getWriter().write(new Gson().toJson(data));


Фаер баг показывает что данные успешно передаются но ничего не возращается и алерт ничего не выдает тоже. Уже различные варианты примеров делал, самостоятельно переделывал...Не пойму, почему сервлет никак не реагирует на данные? и как это все дело граммотно проследить? какие exception писать и как может помочь в этом деле Eclipse? Помогите, третий день не получается два связных комбобокса сделать с данными из базы... Часть работает, а на js застрял серъзно :(
...
Рейтинг: 0 / 0
12.06.2012, 04:32:12
    #37834916
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
А ты ничего не сказал про серверную часть. Java-код отрабатывает? Или не выполняется? Если не выполняется - что-то с маппингом, если выполняется, какую строку показывает выходную? Также замени куцую getJSON, пропиши все параметры и посмотри что возвращается, понятно, что ошибка, а какая? А, потом, судя по функции new Gson().toJson(data), на выходе у нее, похоже, свой объект, а отдавать надо String (ты для этого кодировку ставишь). Также поставь заголовки против кеширования - чем черт не шутит, может, у тебя изначально ответ закешировался (<1%).
...
Рейтинг: 0 / 0
12.06.2012, 17:01:13
    #37835386
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Спасибо за ответ, проблема видимо в кэшировании была.
...
Рейтинг: 0 / 0
12.06.2012, 17:36:34
    #37835424
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Проект простенький, где только сервлет и страница - работает, я запускаю jsp страницу.
У меня есть проект, где несколько сервлетов и jsp страниц - здесь я запускаю сервлет и он отображает данные из jsp страницы.
Например вывод таблицы данных
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
	    List dataList = new ArrayList();  
      	dataList = ShowCatalog();
        request.setAttribute("data",dataList);
		RequestDispatcher dispatcher = request.getRequestDispatcher(page);
		if (dispatcher != null){
			dispatcher.forward(request, response);
		} 
public List ShowCatalog() {
	  List catalogList = new ArrayList();
	 // String sql = "select * from catalog";
      PreparedStatement sql = null;
	  Connection conn = null;
      //Statement stmt = null;
      ResultSet rs = null;
      ResultSetMetaData rsm = null;
    
      try{ 
         conn = getConnection();
        sql = conn.prepareStatement("select * from catalog");    
         rs = sql.executeQuery();        
           while( rs.next()){
          	catalogList.add(rs.getInt("id"));
          	catalogList.add(rs.getString("disk"));
              }
          
     } catch (Exception e){
          
         throw new ServletException(e.getMessage());
          
      } finally {
          
          try{
              
              sql.close();
              conn.close();
              rs.close();
              
          } catch (Exception sqle){   }
          return catalogList;
  }
  }


В таком случае у меня не работает getJSON
Отправляет http://localhost:8080/CS_project/catalog?foo=bar но не возращает нужных данных.
foo bar name Josh time 2pm
Код: javascript
1.
2.
3.
4.
5.
$.getJSON('catalog?foo=bar', {name: 'Josh', time:'2pm'}, function(data) {
    alert('Success: ' + data.success + '\n'
        + 'Message: ' + data.message + '\n'
        + 'Param: ' + data.param);
});


Это потому что я с сервлета запускаю? поэтому я не получаю результат? И как правильно работать с базой и выводит ее на jsp страницу? Например в Java Servlet and JSP Cookbook либо весь код в сервлете, либо в jsp... Я в этом плане немного запутался, можете привести пример или кинуть ссылку на что то, как делают сейчас правильно что бы не мешать код с представлением?
Заголовки против кэширования поставил, это выглядит так?
Код: java
1.
2.
response.setHeader( "Cache-Control", "no-cache" );
		    response.setHeader( "Pragma", "no-cache" );
...
Рейтинг: 0 / 0
12.06.2012, 17:45:13
    #37835436
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Что бы запускалась jsp страница, в форме прописать
Код: java
1.
<form action="catalog" ...>


web.xml
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
<servlet>
    <servlet-name>CatalogServlet</servlet-name>
    <servlet-class>logic.CatalogServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CatalogServlet</servlet-name>
    <url-pattern>/catalog</url-pattern>
  </servlet-mapping>


Но все равно при запуске jsp страницы ошибка "The server encountered an internal error () that prevented it from fulfilling this request.
...
Рейтинг: 0 / 0
12.06.2012, 18:15:47
    #37835464
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Бррр ... так ты делаешь getJSON или форму отправляешь (ожидаешь переход)? Все в одну кучу свалил. Не спеши с базой, ты ответ не получаешь на клиенте. Разберись сначала с этим.

Очень похоже, что ты очень плохо разбираешься в механизме запрос-ответ и ajax (XMLHttpRequest, динамический запрос). Для начала убери jQuery и разберись что к чему. А потом уже упрощай жизнь библиотеками. Читай доку и форумы, больше читай ...
...
Рейтинг: 0 / 0
12.06.2012, 18:46:43
    #37835487
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Я делал сначала без jQuery... На сервер - servlet приходит запрос от клиента - jsp - страницы - request, сервлет его обрабатывает и отправляет ответ request.
Код: java
1.
public void doGet(HttpServletRequest request, HttpServletResponse response) метод get, получачет запрос и отправляет ответ

, есть так же метод Post... Я что то упустил важное?
Я в своем втором случае начинаю работу с сервлета - где создается соединенеие с базой, и оптавляются данные через RequestDispatcher на страницу, которая их выводит в таблицу. т.е. пытаясь загрузить страницу сразу я получаю исключение, так как сервлет еще не обработал данные для того что бы их вывести в таблицу?
Извините за эту словесную свалку, пытаюсь разобраться, так вроде бы понятно все, а на практике не так все...
авторНе спеши с базой, ты ответ не получаешь на клиенте. Разберись сначала с этим. Как разобраться? Я не пойму, как мне возратить ответ? По документации с этой функцией только это мне известно.
До jQuery делал просто JS
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<form name="content_filter" >  
           <table>  
                <tr>  
                     <td>State </td>  
                     <td>  
                          <select name="type" id="type" onchange="changeType()">  
                               <option>-- Select type --</option>
	<%List cat= (List)request.getAttribute("cat");
		for (itr=cat.iterator(); itr.hasNext(); )
		{ %>
		<option value="<%=itr.next()%>"><%=itr.next()%></option>
		<%} %> 
                          </select>  
                     </td>  
                </tr>  
                <tr>  
                     <td>District Name</td>  
                     <td>       
                          <span id="loadGenre">  
                               <select name="genre" id="genre">  
                                    <option>--Select genre--</option>  
                               </select>  
                          </span>  
                     </td>  
                </tr>  
           </table>  
      </form>  


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
function AjaxFunction()  
 {  
      var xmlrequest=false;  
      try  
      {  
           xmlrequest=new ActiveXObject("Msxml2.XMLHTTP");   
      }  
      catch(e1)  
      {  
           try  
           {  
                xmlrequest=new ActiveXObject("Microsoft.XMLHTTP");   
           }  
           catch(e2)  
           {     
                xmlrequest=false;  
           }  
      }  
      if (!xmlrequest && typeof XMLHttpRequest != 'undefined')   
      {  
           xmlrequest=new XMLHttpRequest();  
      }  
      return xmlrequest;  
 }   
 function changeState()  
 {  
      var state=document.getElementById("type").value;  
      var url="catalog?command=typechange&id="+type;  
      var xmlrequest= AjaxFunction();  
      xmlrequest.open("GET",url,true);   
      xmlrequest.onreadystatechange=function()  
      {  
           if(xmlrequest.readyState==4)  
           {  
                if(xmlrequest.status==200)  
                {  
                     //alert(xmlrequest.responseText);  
                     document.getElementById("loadGenre").innerHTML=xmlrequest.responseText;  
                }  
           }  
      };    
      xmlrequest.send(null);  
 }  


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
response.setContentType("text/xml; charset=windows-1252");  
           int typeID=Integer.parseInt(request.getParameter("id").toString());  
           PrintWriter out=response.getWriter();  
List genreList = new ArrayList();
genreList = ShowSubcat(typeID); //функция выполняет извлечение данных из БД по запросу
           String xml="";  
          
                xml="<select name=\"genre\" id=\"genre\">";  
                xml+="<option>--Select genre--</option>";  
                for (Iterator itr=genreList.iterator(); genreList.hasNext(); )
		{
                 xml+="<option id=\""+itr.next()+"\">"+itr.next()+"</option>";  
                } 
                xml+="</select>";  
           }  
           catch(Exception e){  
                System.out.println(e.getMessage());  
           }  
           
           out.write(xml);  
      }  


Проверял алертом, возращает все кроме самого списка genreList
...
Рейтинг: 0 / 0
12.06.2012, 18:48:18
    #37835488
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
*
Код: javascript
1.
 function changeType()
...
Рейтинг: 0 / 0
12.06.2012, 18:57:10
    #37835498
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Как правильно строить приложения по jsp - технологии - запускать сервлет или jsp страницу? В учебниках разные примеры, где иногда запускают сервлет, и он отображает данные с jsp страницы - то что я сейчас сделал, т.е. я запускаю не страницу а сервлет, который выводит даные в таблице которая описана в странице, и в строке браузера я имею адрес сервлета, и только по этому адресу я могу увидеть данные. Или же нужно делать так, что бы запускалась jsp-страница, которая обращается к сервлету за данными и получает ответ, выводит его?
...
Рейтинг: 0 / 0
12.06.2012, 19:04:42
    #37835505
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
http://stackoverflow.com/questions/1824409/servlet-result-display-in-jsp-page вот например как здесь описано, так и я делаю, по другому же не сделать? только в jsp вставлять код, а это "не красиво"..
...
Рейтинг: 0 / 0
13.06.2012, 01:55:01
    #37835720
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
Я даже не знаю, что сказать ... И вижу, что ты заблудился среди 3-ех сосен, и жалко тебя, и хочется помочь, но не понимаю, потому что сосен-то 3!

Сервлет запускается вместе с запуском контейнера сервлетов (или веб-сервером, если они совмещены), чаще всего Томкет. Ты его можешь только "дергать" по меппингу или вызывать из другого сервлета (коим в том числе является jsp-страница, не путать с результатом рендеринга, который отдается клиенту!) ... поэтому, сам понимаешь, "адрес сервлета" - это звучит несколько жестко.

На пальцах всех азов тебе не расскажу и, судя по тому, что кроме меня за сутки не нашлось желающих приоткрыть тебе завесу этой технологии, таких желающих может быть немного ... Только литература, снова "Hello, World!" и пока не поймешь. Могу тебе посоветовать книгу "AJAX in Action" в редакции Manning - она, конечно, не блещет новаторством, но как раз начинается с объяснений Ху-из-ху и пошагово проводит по дебрям этой технологии, с каждым примером усложняя код. Масса примеров, переведена на русский (даже в бумажном варианте!), в принципе, даже бывалый веб-программист найдет интересные моменты для себя в ней. Самое оно. Гарантирую, 95% вопросов отпадут сами собой.

P.S. Не найдешь, стукнись в почту, скину тебе русскую PDF-ку.
...
Рейтинг: 0 / 0
13.06.2012, 11:40:16
    #37836070
Byka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не передаются на страницу параметры в формате json
IDVsbruck - золотой человек:) Спасибо за ответ! Книгу уже скачал, читаю.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Не передаются на страницу параметры в формате json / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]