發送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,成功解析