2016-09-07 5 views
0

У меня возникла проблема при попытке прочитать данные, которые я отправил на сервер с клиента с помощью функции ajax.Как читать данные, отправленные с ajax на сервере отдыха

Чтобы начать, вот моя функция ajax;

$(document).ready(function(){ 

    $('#btnReg').click(function(){ 
      var email = document.getElementById('email').value; 
      var korIme = document.getElementById('korIme').value; 
      var lozinka = document.getElementById('pass1').value; 

      $.ajax({ 
       type: 'POST', 
       url: 'http://localhost:8080/Web_Projekat/rest/korisnici/registracija', 
       contentType: 'application/json', 
       dataType: 'text', 
       data: formToJSON(korIme, lozinka, "Petar", "Petrovic", "Menadzer", "06315487", email, "slika"), 
       success: function(){ 
        alert("Success"); 
       }, 
       error: function(){ 
        alert("Error"); 
       } 
      }); 

     } else { 
      return false; 
     } 


    }); 
}); 

function formToJSON(korIme, lozinka, ime, prezime, uloga, telefon, email, slika) { 
    return JSON.stringify({ 
     "korIme" : korIme, 
     "lozinka": lozinka, 
     "ime": ime, 
     "prezime": prezime, 
     "uloga": uloga, 
     "telefon": telefon, 
     "email" : email, 
     "slika": slika 
    }); 
} 

Данные успешно отправляются на сервер. Вот мой отдых код:

@Path("/korisnici") 
public class KorisnikServis { 

    @Context 
    HttpServletRequest request; 
    @Context 
    ServletContext ctx; 

    @POST 
    @Path("/registracija") 
    @Consumes({ MediaType.APPLICATION_JSON}) 
    @Produces(MediaType.TEXT_PLAIN) 
    public String registracija(String data) { 
     return data; 
    } 
} 

К сожалению для имен классов, потому что они не на английском языке.

Теперь мой вопрос: Как я могу разобрать данные, которые были отправлены и работать с ним? Поскольку переменные данные - это просто строка с json-форматом. Как я могу извлечь, скажем, адрес электронной почты, который был отправлен клиентом?

UPDATE Я добавил несколько файлов jar и добавил action = "" в мою форму. Но теперь я получаю эту ошибку: «Статус HTTP 415 - Неподдерживаемый тип носителя» Я использую apache tomcat 6

Спасибо.

ответ

0

Вы можете получить данные из Ajax запроса в контроллере сервлета, используя следующую команду

request.getParameter("emailAddress");

Выше заявление даст вам электронный адрес, установленный в запросе Ajax.

+0

Я пробовал: Строка прошлаEmail = request.getParameter ("email"); и прошлоEmail имеет значение null. – P3P5

+1

Это не может работать, потому что вы не отправляете HTML-форму. –

+0

Будет работать. Можете ли вы предоставить код вызова ajax? Согласно вам вызов ajax, вы не инициализируете электронную почту в указанном вами коде – Abhijeet

0

Добавить класс для обработки данных формы

public class FormData { 

String korIme; 
String lozinka; 
String ime; 
String prezime; 
String uloga; 
String telefon; 
String email; 
String slika; 

public FormData() { 
    // TODO Auto-generated constructor stub 
}  
public String getKorIme() { 
    return korIme; 
} 
public void setKorIme(String korIme) { 
    this.korIme = korIme; 
} 
public String getLozinka() { 
    return lozinka; 
} 
public void setLozinka(String lozinka) { 
    this.lozinka = lozinka; 
} 
public String getIme() { 
    return ime; 
} 
public void setIme(String ime) { 
    this.ime = ime; 
} 
public String getPrezime() { 
    return prezime; 
} 
public void setPrezime(String prezime) { 
    this.prezime = prezime; 
} 
public String getUloga() { 
    return uloga; 
} 
public void setUloga(String uloga) { 
    this.uloga = uloga; 
} 
public String getTelefon() { 
    return telefon; 
} 
public void setTelefon(String telefon) { 
    this.telefon = telefon; 
} 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 
public String getSlika() { 
    return slika; 
} 
public void setSlika(String slika) { 
    this.slika = slika; 
} 

}

Обновите вебсервис

@POST 
@Path("/registracija") 
@Consumes({ MediaType.APPLICATION_JSON}) 
@Produces(MediaType.TEXT_PLAIN) 
public String registracija(FormData data) { 
data.email;/////this is email 
    return data; 
} 
+0

Я пробовал свой путь, и ничего. Когда ajax вызывается снова, он запускает свой метод ошибок. – P3P5

0

Создайте класс Java (POJO) a Затем используйте ObjectMapper (Jackson и т. д. - да, для этого требуется добавить дополнительные библиотеки), чтобы преобразовать вашу json-строку в экземпляр/объект POJO.

POJO

public class User { 

    public User(){ 
    } 

    private String ime; 
    private String prezime; 
    private String lozinka; 

    //add other fields 

    public String getIme(){ 
    return ime; 
    } 
    public void setIme(String ime){ 
    this.ime = ime; 
    } 

    //other getters/setters 
    } 


} 

ObjectMapper

import org.codehaus.jackson.map.DeserializationConfig.Feature; 
import org.codehaus.jackson.map.ObjectMapper; 

public class JsonParser { 
    ObjectMapper objectMapper=new ObjectMapper(); 
    public <T> T parseJson(String json,Class<T> targetType)throws Exception{      
     objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
     return objectMapper.readValue(json, targetType); 
    } 
} 

И тогда в вашем методе сервера

@POST 
@Path("/registracija") 
@Consumes({ MediaType.APPLICATION_JSON}) 
@Produces(MediaType.TEXT_PLAIN) 
public String registracija(String data) { 

    JsonParser parser = new JsonParser(); 

    User myUser = parser.parseJson(data, User.class); 
    //do whatever you want with myUser 

    return data; 
} 

Обратите внимание, что при добавлении библиотеки JSON в приложение, а затем Джерси должен быть в состоянии сделайте автоматическое преобразование, что означает, что вы можете переписать свой метод на чтение

@POST 
    @Path("/registracija") 
    @Consumes({ MediaType.APPLICATION_JSON}) 
    @Produces(MediaType.TEXT_PLAIN) 
    public String registracija(User data) { 
.... 
} 
+0

Благодарим вас за ответ. Но я знаю, что он тоже должен работать. Я выяснил, что если я удалю данные String в качестве аргумента для класса registracija и напишу его следующим образом: public String registracija() и просто верну некоторый текст, я получаю успех от ajax, но когда добавляю аргумент в класс Я получаю ошибку от ajax. Может быть, я не правильно отправляю данные на сервер? – P3P5

+0

Я не уверен, но, возможно, вы можете переписать свой ajax, чтобы отправить HTML-форму, а не отправлять переменную (отформатированную как json). Вы можете посмотреть http://stackoverflow.com/questions/1960240/jquery-ajax-submit-form –

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