Easyui Treeはドメイン間でデータを取得します.
4644 ワード
js言語は安全のため、ドメイン間でデータにアクセスすることは許されません.プロジェクトの必要性のために、異なるドメインからデータを取得する必要がある場合があります.もちろん、解決策があります.JSONPは、JSON with padding(パディングJSONまたはパラメトリックJSON)の略で、JSONPはJSONとあまり差がないように見えますが、関数呼び出しに含まれているにすぎません.
JSONPはコールバック関数とデータの2つの部分から構成されています.コールバック関数は、応答が来るとページで呼び出すべき関数であり、関数は一般的に要求で指定されます.データはコールバック関数に入力されたJSONデータです.次はJSONPリクエストです.
ここで指定したコールバック関数はhandleResponse()です.Jqueryは$を提供した.getJSON()は、ドメイン間でデータにアクセスします.具体的なコードフロントコードを見てみましょう
バックグラウンド、異なるドメインで
これにより、ドメイン間でデータを取得する方法が完了します.フロントでは$も使えます.ajax()方式でデータを取得します.
同じようにデータを正常に返すことができます.交流討論を歓迎します
callback({"name":"mike"});
JSONPはコールバック関数とデータの2つの部分から構成されています.コールバック関数は、応答が来るとページで呼び出すべき関数であり、関数は一般的に要求で指定されます.データはコールバック関数に入力されたJSONデータです.次はJSONPリクエストです.
http://127.0.0.1/json/?callback=handleResponse
ここで指定したコールバック関数はhandleResponse()です.Jqueryは$を提供した.getJSON()は、ドメイン間でデータにアクセスします.具体的なコードフロントコードを見てみましょう
$.getJSON("http://localhost:8082/treeData?callback=?",function(treeData){
console.log(" getJSON");
console.log(treeData);
$("#tt").tree({
data:treeData,
onSelect:function(node){
$(this).tree('expand',node.target);
}
});
});
バックグラウンド、異なるドメインで
@RequestMapping(value="treeData",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
@ResponseBody
public String getData(String callback){
List resultData = resultData(0);
// , List String
String jsonString = JsonUtils.objectToJson(resultData);
//
// JSONP
return callback+"("+jsonString+");";
}
/**
*
* @param parentId
* @return
*/
public List resultData(long parentId){
// id
List topList = tbItemCatMapper.getItemList(parentId);
List resultTree=new ArrayList();
//
for (TbItemCat tbItemCat : topList) {
Tree tree=new Tree();
tree.setId(tbItemCat.getId());
tree.setText(tbItemCat.getName());
//
if (tbItemCat.getIsParent()) {
tree.setState("closed");
//
tree.setChildren(resultData(tbItemCat.getId()));
resultTree.add(tree);
}else {
resultTree.add(tree);
}
}
return resultTree;
}
これにより、ドメイン間でデータを取得する方法が完了します.フロントでは$も使えます.ajax()方式でデータを取得します.
$.ajax({
type:'POST',
url:'http://localhost:8082/treeData?abc=fun1',
dataType:'jsonp',
jsonpCallback:'fun1',
success:function(data){
console.log(data);
},
error:function(data){
console.log("error");
console.log(data);
}
});
// ,
function fun1(resultData){
//
datas=data;
console.log(" fun1");
console.log(data);
$("#tt").tree({
data:resultData
});
}
同じようにデータを正常に返すことができます.交流討論を歓迎します