php ztree异步加载数据格式,zTree异步加载简单demo

这几天花了些时间,试了试zTree自带的异步加载方式 还不错.

有个奇怪的问题:

无论我在服务器设置 setContentType("text/plain;charset=UTF-8")或是 setContentType("application/json;charset=UTF-8"),zTree都会把接收到的数据当json格式,除非不符合json格式.

(另:JSONBuilder是个简单的json处理类,适用于不复杂的数据格式)

以下是简单的demo

test2.html

无标题文档

var nodeIcon = "images/4.png";

var groupIcon = "images/1_open.png";

function initTree(){

var setting = {

check: {

enable: true

},data: {

simpleData: {

enable: true

}

},async: {

enable: true,url:"http://localhost/web_test1/action/test2Action.jsp",dataType: "text",dataFilter: ajaxDataFilter,autoParam:["id"]

}

};

/***/

var zNodes =[

{id:"userGroup:__ALL__",name:"全部用户组",open:true},{pId:"userGroup:__ALL__",id:"userGroup:001",name:"用户组_001",isParent:true,open:false,icon:groupIcon},id:"userGroup:002",name:"用户组_002",id:"hostGroup:001",name:"设备组_001",id:"hostGroup:002",name:"设备组_002",icon:groupIcon}

];

/***/

$.fn.zTree.init($("#myTree"),setting,zNodes);

}

function ajaxDataFilter(treeId,parentNode,data) {

//alert(data);

//alert( $(data).attr("count"));

var array = [];

//var jsonp = $.parseJSON(childNodes);

//var nc = parseInt($(jsonp).attr("count"));

var nc = parseInt($(data).attr("count"));

var _pId = parentNode.id;

var _id = null;

var _name = null;

//alert($(data).attr("id["+ i +"]"));

//alert("nc:"+nc);

//alert(parentNode.id);

for(var i=0; i

//item = {pId:parentNode.id,id:$(jsonp).attr("id["+ i +"]"),name:$(jsonp).attr("name["+ i +"]"),isParent:false,open:true};

//item = {pId:parentNode.id,id:"test:"+i,name:"test_"+i,open:true};

_id = $(data).attr("id["+ i +"]");

_name = $(data).attr("name["+ i +"]");

array[i] = {pId:_pId,id:_id,name:_name,open:true,icon:nodeIcon};

}

return array;

}

function old_ajaxDataFilter(treeId,childNodes) {

//alert(childNodes);

var txt = "";

var jsonp = $.parseJSON(childNodes);

var nc = parseInt($(jsonp).attr("count"));

for(var i=0; i

txt += $(jsonp).attr("id["+ i +"]") + "
";

}

alert(txt);

return null;

}

$(document).ready(function(){

initTree();

});

.div_frame{

width:800px;

border: 1px solid #a5a4a4;

}

.div_tree{

width:300px;

height:200px;

overflow:auto;

border: 1px solid #a5a4a4;

}

test2Action.jsp

Insert title here

// String json = "{\"count\":\"3\",\"id[0]\":\"id_0\",\"id[1]\":\"id_1\",\"id[2]\":\"id_2\"}";

//String json = "{\"count\":\"2\",\"name[0]\":\"name_0\",\"name[1]\":\"name_1\",}";

String json = null;

Random rand = new Random(System.currentTimeMillis());

int count = rand.nextInt(8)+2;

JSONBuilder js = new JSONBuilder();

js.put("count",""+count);

for(int i=0; i

js.put("id["+ i +"]","test:"+i);

js.put("name["+ i +"]","test:"+i);

}

json = js.toJsonString();

String id = request.getParameter("id");

System.out.println("id:" + id);

//json => application/json text/x-json

// response.setContentType("text/plain;charset=UTF-8");

response.setContentType("application/json;charset=UTF-8");

response.setCharacterEncoding("UTF-8");

PrintWriter pw = response.getWriter();

pw.write(json);

pw.flush();

pw.close();

%>

JSONBuilder.java

package org.sl.json;

import java.util.Enumeration;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Properties;

/**

* 可以用来处理格式比较简单的json字符串

* @author shanl

*

*/

public class JSONBuilder {

//private Properties dict = new Properties();

private Map dict = new LinkedHashMap(20);

/**

* 写入一个键/值对

* @param key

* @param value

*/

public void put(String key,String value){

this.dict.put(replaceJsonChar(key),replaceJsonChar(value));

}

private String replaceJsonChar(String str){

StringBuilder sb = new StringBuilder();

char[] chs = str.tocharArray();

for(char c: chs){

switch (c) {

case '\"':

sb.append("\\\"");

break;

case '\\':

sb.append("\\\\");

break;

case '/':

sb.append("\\/");

break;

case '\b':

sb.append("\\b");

break;

case '\f':

sb.append("\\f");

break;

case '\n':

sb.append("\\n");

break;

case '\r':

sb.append("\\r");

break;

case '\t':

sb.append("\\t");

break;

default:

sb.append(c);

}

}

return sb.toString();

}

/**

* 返回键/值对列表

* @return

*/

public Map getDict(){

return dict;

}

/**

* 返回键所对应的值

* @param key

* @return

*/

public String getValue(String key){

return dict.get(key);

}

/**

* 解析json格式字符串

* @param json

*/

public void parseJsonString(String json){

String _json = json;

String[] ss = null;

String[] tmp = null;

_json = _json.trim(); //去掉两端空格

_json = _json.substring(2); //去掉 {"

_json = _json.substring(0,_json.length()-2); //去掉 }"

ss = _json.split("\",\"");

for(String s: ss){

tmp = s.split("\":\"");

put(tmp[0],tmp[1]);

}

}

/**

* 将数据转换成json格式字符串

* @return

*/

public String toJsonString(){

String sb = "";

String key = null;

String value = null;

Iterator keys = dict.keySet().iterator();

//Enumeration keys = dict.propertyNames();

sb += "{";

while(keys.hasNext()){

key = keys.next();

value = dict.get(key);

sb += "\""+ key +"\":";

sb += "\""+ value +"\",";

}

if(sb.endsWith(",") ){

sb = sb.substring(0,sb.length()-1);

}

sb += "}";

return sb.toString();

}

public String toString(){

return toJsonString();

}

}

JSONBuilder测试类,Test2.java:

package test1;

import org.sl.json.JSONBuilder;

public class Test2 {

public static void main(String[] args){

t7();

//t1();

}

static void t7(){

String str = "{\"count\":\"3\",\"id[2]\":\"id_2\"}";

JSONBuilder js = new JSONBuilder();

js.parseJsonString(str);

System.out.println(js.getValue("id[1]"));

}

static void t6(){

JSONBuilder js = new JSONBuilder();

js.put("abc\"sasas","sasjajsas\"saas");

System.out.println(js.toJsonString());

}

static void t5(){

String str = "{\"count\":\"3\",\"id[2]\":\"id_2\"}";

JSONBuilder js = new JSONBuilder();

js.parseJsonString(str);

System.out.println(js.getValue("count"));

System.out.println(js.getValue("id[0]"));

}

static void t4(){

String str = "'{\"count\":\"3\",\"id[2]\":\"id_2\"}'";

JSONBuilder js = new JSONBuilder();

js.parseJsonString(str);

System.out.println(js.getValue("count"));

}

static void t3(){

String str = "'{\"count\":\"3\",\"id[2]\":\"id_2\"}'";

String[] ss = str.split("\",\"");

for(String s: ss){

System.out.println(s);

}

}

static void t2(){

JSONBuilder js = new JSONBuilder();

String str = "'{\"count\":\"3\",\"id[2]\":\"id_2\"}'";

str = str.trim();

str = str.substring(3);

str = str.substring(0,str.length()-3);

System.out.println(str);

System.out.println();

String[] tmp = null;

String[] ss = str.split("\",\"");

for(String s: ss){

tmp = s.split("\":\"");

js.put(tmp[0],tmp[1]);

}

System.out.println(js.getValue("count"));

}

static public void t1(){

JSONBuilder js = new JSONBuilder();

int c = 3;

js.put("count",c+"");

for(int i=0; i

js.put("id["+ i +"]","id_"+i);

}

System.out.println(js.toJsonString());

}

}

总结

以上是编程之家为你收集整理的zTree异步加载简单demo全部内容,希望文章能够帮你解决zTree异步加载简单demo所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值