2016-09-07 63 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

可以使用下面的命令

request.getParameter("emailAddress");

上述声明会给你的电子邮件地址在Ajax请求设置让你的控制器servlet从Ajax请求的数据。

+0

我试过这个: String passedEmail = request.getParameter(“email”); 和传递的邮件为空。 – 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; 
} 

}

更新你的web服务

@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 –