2016-11-23 4 views
0

У меня есть этот JavaScript, который должен послать JSON моего метод escreve POST RESTПочему мой метод POST не может получить этот ajax?

$(document).ready(function() { 
    $("#idform").on('submit', function(e) { 
     e.preventDefault(); 
     alert($("#idform").serialize()); 
     $.ajax({ 
      url : 'http://localhost:8080/DBRest/rest/escreve', 
      type : "POST", // type of action POST || GET 
      dataType : 'json', // data type 
      data : $("#idform").serialize() // post data || get data 
     }) 

    }); 
}); 

это моя сторона сервера escreve метод:

@POST 
@Path("escreve") 
@Consumes(MediaType.APPLICATION_JSON) 
public void escreve(InputStream dado) throws IOException { 
    StringBuilder construtor = new StringBuilder(); 
    try { 
     BufferedReader in = new BufferedReader(new InputStreamReader(dado)); 
     String linha = null; 
     while ((linha = in.readLine()) != null) { 
      construtor.append(linha); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    System.out.println(construtor.toString()); 
    Pessoa pessoa = gson.fromJson(construtor.toString(), Pessoa.class); 
    Repo.escreve(pessoa);  
} 

К сожалению, я получил сообщение на Chrome F12 в:

jquery.min.js:4 POST http://localhost:8080/DBRest/rest/escreve 415 (Unsupported Media Type) 
send @ jquery.min.js:4 
ajax @ jquery.min.js:4 
(anonymous function) @ index.html:20 
dispatch @ jquery.min.js:3 
q.handle @ jquery.min.js:3 

С js alert($("#idform").serialize()); Я получил: nome=Mary&idade=12, что явно не анализируется JSON. Я теперь мой метод escreve работает, потому что я проверил его с классом Java, который правильно отправил объект JSON.

+0

Так у вас есть метод, который принимает JSON , вы отправляете данные, которые, как вы знаете, не * json, и вы спрашиваете, почему это не работает? – f1sh

+0

http://stackoverflow.com/questions/1184624/convert-form-data-to-javascript-object-with-jquery – 1252748

+1

@ f1sh Я спрашиваю, как это можно сделать правильно. Очевидно, меня не интересует только окончательный ответ. У меня это уже есть. Если у вас есть какие-либо дополнительные знания, пожалуйста, отправьте ответ. В противном случае, просто вниз и подождите, пока кто-нибудь объяснит это. – GabrielRado

ответ

0

Попробуйте использовать serializeArray, что создает массив. Проверьте это самостоятельно: console.log($("#idform").serializeArray());. serialize создает строку запроса, которая должна быть частью HTTP-запроса. Оба представления эквивалентны в том смысле, что с использованием соответствующего кода вы можете конвертировать одно в другое без какой-либо двусмысленности.

Обе версии доступны, потому что serialize удобен, если вы хотите сделать HTTP-запрос, поставив результаты в строку запроса, а serializeArray удобнее, если вы хотите обработать результаты самостоятельно.

0

Попробуйте отправить их sepperatly

$.ajax({ 
      url: 'http://localhost:8080/DBRest/rest/escreve', 
      type: 'POST', 
      data: { input1: $("#input1").val(), input2: $("#input2").val() }, 
      success: function(result) { 

      } 
     }); 

И если вы хотите, чтобы прочитать его в PHP

echo $_POST["input1"].$_POST["input2"]; 
Смежные вопросы