jquery.post("url",{},function(data),'json');里面的data如何用java操作 50

jquery.post("url",{"value"},function(data){data.result.............;},'json');里面的data... jquery.post("url",{"value"},function(data){data.result.............;},'json');里面的data是网页返回的数据,我现在用java写一个客户端程序,post到url后,如何取得data呢?我用的是httpclient,post后的服务器相应200OK,没问题.但我看到的response报文长度是0,可我确定它是肯定要返回data的,难道是通过别的方式返回么?
好像我没说清楚,我的意思是,那个网页是用jquery.post和服务器联系的,我用java写了个客户端,想不用浏览器了,现在取不到上面说的回来的data了.
jquery.post("url",{},function(data),'json')是我看网页源代码里面这么处理的我想知道我写的程序里怎么处理..
展开
 我来答
逝_繁华如梦
推荐于2017-05-19
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
1、引入包(本文中的包全部引自struts-2.1.8.1\lib):

struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。最后加入struts2必须的6个包:

struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:

1) Userinfo实体类代码
public class UserInfo implements Serializable {
private int userId;
private String userName;
private String password;
get set方法略
}

2) Action类
public class TestAction extends ActionSupport {
private String message; //使用json返回单个值
private UserInfo userInfo; //使用json返回对象
private List userInfosList; //使用josn返回List对象
get set方法略
/*返回单个值*/
public String returnMsg(){
this.message = "成功返回单个值";
return SUCCESS;
}
/*返回UserInfo对象*/
public String returnUser(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
return SUCCESS;
}
/*返回List对象*/
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
return SUCCESS;
}
}

3) struts.xml(必须继承json-default、json-default继承自struts-default)
<package name="default" namespace="/json" extends="json-default">
<action name="returnMsg" class="com.testAction " method="returnMsg">
<result name="success" type="json">
<param name="root">validate</param>
</result>
</action>
<action name="returnUser "
class="com.testAction " method="returnUser ">
<result name="success" type="json">
<param name="includeProperties">
userInfo\.userId,userInfo\.userName,userInfo\.password
</param>
</result>
</action>
<action name="returnList" class="com.testAction "
method="returnList">
<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>
</action>
</package>

3、前台:

1) 页面引入jquery-1.4.2.js
2) 代码如下:
<script language="javascript">
function getMsg(){
$.ajax({
url:'json/returnMsg.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").html(data.message);
}
});
}

function getUser(){
$("# result ").html("");
$.ajax({
url:'json/returnUser.action',
type:'post',
dataType:'json',
success:function(data){
$("#result").append("用户ID:"+data.userInfo.userId+"")
.append("用户名:"+data.userInfo.userName+"")
.append("密码:"+data.userInfo.password+"");
}
});
}

function getUserList(){
$("# result ").html("");
$.ajax({
url:'json/returnList.action',
type:'post',
dataType:'json',
success:function(data){
$.each(data.userInfosList,function(i,value){
$("#result").append("第"+(i+1)+"个用户")
.append("用户名:"+value.userName+"")
.append("密码:"+value.password+"");
}
}
});
}
</script>
<div id="result"></div>
<input type="button" value="获得单个消息" onclick="getMsg()"/>
<input type="button" value="获得用户信息" onclick="getUser()"/>
<input type="button" value="获得用户列表" onclick="getUserList()"/>

4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据

5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

如:输出UserInfo的所有属性及UserInfo的userName属性

<result type="json">
<param name="includeProperties"> userInfo.*,
userInfo \. userName </param>
</result>

6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties

7、输出一个JSON List列表

<result name="success" type="json">
<param name="includeProperties">
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
</param>
</result>

其中userInfosList是action中的一个List类型的属性,userInfosList \[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。

8、为什么要用includeProperties或excludeProperties 参数:主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。如果不配置,默认是处理 action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回 。如果不用<param name="includeProperties">或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把 action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callback function,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、 includeProperties 和excludeNullProperties参数。当然还有其他的方法,如给pojo的属性加json注解。

9、总结: action中避免使用get开头的action方法,去掉action中的接口的get方法 为json类型的result配置includeProperties, excludeProperties等参数.
一个鸭梨呐
2019-12-16
知道答主
回答量:12
采纳率:0%
帮助的人:1.8万
展开全部
  1. 先介绍JQuery post

jQuery post() 方法 | 菜鸟教程

$(selector).post(URL,data,function(data,status,xhr),dataType)

url是请求的链接(必选),{}里是请求的参数(可选),function针对返回的数据要做的事情(可选),最后的datatype是期待返回的数据的类型(可选)

2.使用HttpClient和json对应的jar包
maven设置

<!-- 添加以下设置,可以选其他版本 -->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.4</version>
</dependency>

3.使用Java该怎么写
怎样设置HttpClient中post的参数,参考:为GET和POST请求添加请求参数和请求头,有样例代码。

我自己编写的内容:

/**
 * 针对请求的链接,使用post方法获取返回的数据
 * @param urlStr String类型
 * @return 这里是Map类型,按自己的情况设置
 */
private Map getPageContByHttpCl(String urlStr) {
 CloseableHttpClient httpclient = HttpClients.createDefault();
 HttpPost post = new HttpPost(urlStr);
 
 String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362";
 post.setHeader("User-Agent", userAgent);
 CloseableHttpResponse response = null;
 String result = null;
 // 创建请求参数
    List<NameValuePair> list = new LinkedList<NameValuePair>();
    //设置为自己的请求参数,键值对,例如
    BasicNameValuePair param1 = new BasicNameValuePair("id", "98212");
    list.add(param1);
    // 使用URL实体转换工具
    UrlEncodedFormEntity entityParam = null;
 try {
  entityParam = new UrlEncodedFormEntity(list, "UTF-8");
  post.setEntity(entityParam);
 } catch (UnsupportedEncodingException e1) {
  e1.printStackTrace();
 }
    
 try {
  response = httpclient.execute(post);
  HttpEntity entity = response.getEntity();
  result = EntityUtils.toString(entity, "UTF-8");
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } finally {
  try {
   response.close();
   httpclient.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 System.out.println(result);//输出获取的数据
 //下面按照自己的情况编写
 Gson gson = new Gson();
 Map map = gson.fromJson(result, Map.class);
 return map;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友52a200958
2011-06-08
知道答主
回答量:38
采纳率:0%
帮助的人:20.7万
展开全部
jquery:
function changeRoom(h_id){
var url="/servlet/O?action=roomquery";
var html = "";
$.ajax({
type: "POST",
cache: false,
data:{h_id:h_id},
url: url,
dataType:"json",
success: function(da){
for(var i=0;i<da.length;i++){
html+='<option value="'+da[i].r_id+'">'+da[i].r_name+'</span>';
}
}
});
}
java:
需要json.jar包
PrintWriter out = response.getWriter();
JSONArray json = new JSONArray();
for( Hotel hotel:hotelList ){
jo = new JSONObject();
jo.put("h_id", hotel.getId() );
jo.put("h_name", hotel.getHName() );
json.put(jo);
}
out.println(json.toString() );
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
txhasll
2011-06-09 · TA获得超过123个赞
知道答主
回答量:156
采纳率:0%
帮助的人:81.7万
展开全部
在action的后台,给前台传数据的时候要用jsonObject
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jxls080511
2012-06-28
知道答主
回答量:1
采纳率:0%
帮助的人:1605
展开全部
请问你解决了吗?我现在遇到相同的问题,无法解决,想请教你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式