javascript: возникают проблемы при передаче значений формы в javascript и обработке его в httprequest - PullRequest
1 голос
/ 05 июня 2009

У меня есть Java-сервлет (класс), который заполняет данные формы.

  //encode string for special characters
  String encodedString = URLEncoder.encode(desc, "UTF-8");

  out_table.append("<form name=\"masinsert"+id+"\" method=\"GET\" action=\"MASInsert2\">\n");

    out_table.append("<input type=hidden id=\"partnumber"+id+"\" name=\"partnumber"+id+"\" value=\""+part+"\">\n");
                    out_table.append("<input type=hidden id=\"itemdescription"+id+"\" name=\"itemdescription"+id+"\" value=\""+encodedString+"\">\n");


  out_table.append("<tr><td colspan=2><input id=\"m"+id+"\" type=\"button\" onclick=\"masinsert('"+ id +"')\" value=\"Add\"></td></tr>");

который зацикливается с другим идентификатором, как вы можете видеть, чтобы форма выглядела следующим образом

<form name="masinser12" method="GET" action="MASInsert2">
<input type=hidden id="partnumber12" name="partnumber12" value="9999">
<input type=hidden id="itemdescription12" name="itemdescription12" value="1. test description">
<input id="m12" type="button" onclick="masinsert('"+ id +"')" value="Add"> 

<form name="masinser13" method="GET" action="MASInsert2">
<input type=hidden id="partnumber13" name="partnumber13" value="2222">
<input type=hidden id="itemdescription13" name="itemdescription13" value="2. test description">
<input id="m12" type="button" onclick="masinsert('"+ id +"')" value="Add"> 

и они публикуют этот javascript, который находится в заголовке HTML сгенерированных форм

function masinsert(id)
{
 var currentTime=new Date();


 var button = document.getElementById("m"+id);
 button.onclick="";
 button.value="Inserting";

 var partnumber     = document.getElementById("partnumber"+id).value;
 var itemdescription    = document.getElementById("itemdescription"+id).value;


 function handleHttpResponse()
  {
   if (http.readyState == 4) {
    button.value="Item Added";
   }
  }


 var http = getHTTPObject(); // We create the HTTP Object
 var tempUrl = "\MASInsert2";
 tempUrl +=  "?partnumber="+partnumber+"&"+"itemdescription="+itemdescription+"&"+"itemshortdescription="+itemdescription.substring(0,37)
alert(tempUrl);
 http.open("GET", tempUrl, true);
 http.onreadystatechange = handleHttpResponse;
 http.send(null);   
    }

function getHTTPObject(){
 var xmlhttp;
 /*@cc_on
 @if (@_jscript_version >= 5)
   try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   }catch (e){
    try {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     }catch (E) {
      xmlhttp = false;
      }
  }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
 }

и JavaScript поворачивается и отправляет сообщения в этот файл Java, который вставляет данные в базу данных с помощью фрагмента

String partnumber = request.getParameter( "partnumber");
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String itemdescription = URLDecoder.decode(request.getParameter( "itemdescription"), "UTF-8");
        String itemshortdescription = request.getParameter( "itemshortdescription");
out.println(itemimport(partnumber,itemdescription, itemshortdescription));
} 

{ private String itemimport (String partnumber, String itemdescription, String itemshortdescription){ 
---
---
}

Я решил сократить количество параметров для удобства чтения. Главное, с чем у меня проблемы, это то, как правильно передается URLDecoding и URLEncoding для вставки в Java PreparedStatement. Я сузил проблему, заключающуюся в том, что где-то в JavaScript присутствует, потому что, когда я создал простую HTML-форму с переменными, заполненными значениями URLEncoded, он вставляется просто отлично. Однако, когда я запускаю его через JavaScript, я получаю нулевую ошибку

Есть ли лучший способ сделать это или какие-либо идеи, почему ценности не проходят через это? Требует ли javascript какой-то доработки при кодировании строк для Post'ed или Get?

Заранее спасибо.

UPDATE: Я только что сделал System.out.println на досягаемом request.getParamter и скрипт останавливается на Строка itemdescription = URLDecoder.decode (request.getParameter ("itemdescription"), "UTF-8"); поэтому очевидно, что у него есть проблема с URLDecoder.decode (request.getParameter ("itemdescription"), "UTF-8")

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Вот несколько вещей, которые стоит попробовать: В вашем JavaScript кодируйте ваши параметры URL с помощью encodeURIComponent :

tempUrl +=  "?partnumber="+encodeURIComponent(partnumber)+"&"+"itemdescription="+encodeURIComponent(itemdescription)+"&"+"itemshortdescription="+encodeURIComponent(itemdescription.substring(0,37))

Далее вам может потребоваться установить кодировку по запросу, используя setCharacterEncoding

Наконец, я думаю, что если вы вызываете request.getParameter, он выполняет кодирование URL для вас.

0 голосов
/ 05 июня 2009

выглядит так, как будто вы должны быть url, кодирующими значения параметров вашего запроса в вашем javascript

tempUrl + = "? Partnumber =" + partnumber + "&" + "itemdescription =" + escape (itemdescription) + "&" + "itemshortdescription =" + escape (itemdescription.substring (0,37))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...