Как отправить документ XML на сервер с клиента в jQuery - PullRequest
2 голосов
/ 26 августа 2010

Я пытаюсь отправить документ XML на сервер с клиента.Но когда сервер получает документ XML.Это всегда пусто.Вот моя функция jquery.Он отправляет XML на сервер:

var str = '<?xml version="1.0" encoding="UTF-8"?><foo><bar>Hello World</bar></foo>';
    var xmlData = strToXml(str); // convert string to xml
    console.log($.isXMLDoc(xmlData)); // return true
    $.ajax({
        url: 'foo.bar'
        , processData: false
        , data: xmlData
        , success: function(response){
            console.log(response);
        }
        , error: function(response) {
            console.log(response);
        }
    });

И код на стороне сервера.Это получить документ XML.

try {
            HttpServletRequest request = ServletActionContext.getRequest();
            InputStream is = request.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String line = "";
            System.out.println(reader.read()); // return -1
            while((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

Ребята, вы можете привести какой-нибудь рабочий пример?И спасибо за любые советы и пост.

Ответы [ 3 ]

5 голосов
/ 26 августа 2010

В вашем запросе ajax отсутствует свойство "type".Значением по умолчанию, если вы не предоставите его, является GET.

Также нет необходимости конвертировать ваши данные в XML Dom, когда вы отправляете их по проводам, если вы не хотите что-то делать с ними на стороне клиента:

     function sendXml()   {  
        var str = '<?xml version="1.0" encoding="UTF-8"?><foo><bar>Hello World</bar></foo>';
        // var xmlData = strToXml(str); // no need for this unless you want to use it
                                        // on client side
        // console.log($.isXMLDoc(xmlData)); 
        $.ajax({
           url: 'test.jsp', 
           processData: false,
           type: "POST",  // type should be POST
           data: str, // send the string directly
           success: function(response){
             alert(response);
           },
           error: function(response) {
              alert(response);
           }
        });
     }
2 голосов
/ 26 августа 2010
$.ajax({
   type: "POST",
   url: 'foo.bar', 
   processData: false,
   data: xmlData,
   success: function(response){
       console.log(response);
   },
   error: function(response) {
       console.log(response);
   }
 });
0 голосов
/ 26 августа 2010

Помимо точки пропуска типа в вашем запросе ajax. Вы пробовали просто использовать

String xmlData = request.getParameter("data");

Это был бы самый простой способ получить доступ к параметру "data" из почтового запроса.

Начиная с JavaDoc , getInputStream должен использоваться с двоичными данными; для обработки текстовых данных используйте getReader (), который возвращает вам bufferedReader.

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