发送ajax请求和一般请求无异,只是在请求头信息中加上一条:
httpGet.addHeader("X-Requested-With","XMLHttpRequest");
下面是在目标网页上的ajax请求源码
<script>
Do(function(){
$("html").delegate(".a_search_more","click",function(c){
c.preventDefault();
if(b.hasClass("processing")){
return
}
var a=b.data();
b.attr("title",b.text()).text("加载中...");
$.get("/j/search",a,function(d){
if(d.r){
b.text("加载失败...");
return
}
b.removeClass("processing");
b.text(b.attr("title"));
$(d.items.join("")).insertBefore(b.parent());//根据此行,基本确定返回的是json字符串
if(!d.more){
b.hide()
}
})
});
......
}
</script>
确定返回的是json字符串后,接下来要对json字符串进行处理。java中关于json处理的jar包比较多的是json-lib-XXX.jar,这个包到jdk1.5之后就没有见到新的版本了。所以我使用的是alibaba出的fastjson。
下面贴出返回的json字符串代码:
{"total":249,"more":true,"limit":20,"items":["\n \n <div class=\"result\">\n ... ... </div>\n <p>吴邪戴上了三叔的人皮面具,以三叔的身份整顿了三叔在长沙的产业,三叔手下盘口的马仔无不归顺。吴邪、潘子和小花等人兵分三路,从杭州、长沙和北京出发前往广西。在广...</p>\n </div>\n </div>\n"]}
可以看到,大量显示的数据都在items中,接下来
JSONObject json = JSON.parseObject(html); //将JSON类型的String语句转为JSON Object
JSONObject jItem = json.getJSONObject("items");
上文中,html为返回的json字符串。这样就得到了items的值。
["\n \n <div class=\"result\">\n ... ... </div>\n </div>\n"]
但是,这其中包含换行符和转义字符“\”,还有首尾的中括号,双引号。
String items = j.toString();
items = items.replace("\\n", "");
items = items.replace("\\","");
items = items.substring(2, items.length()-2);
Document docAdd = Jsoup.parse(items); //解析成为document
results = docAdd.select("div.result"); //得到Elements,成功解析