$.ajax返回值问题
时间:2009-09-10
来源:互联网
大家好!
我在集成struts2+jquery+jstree+json时发现一个问题
$(function () {
$.ajaxSetup({cache:false});//
var jsTree = $.tree_create();
jsTree.init($("#codeListTree"),{
data:{
async: true,
url : "/scdeap/json/CodeListTree.action",
type:"json"
},
ui:{
theme_name : "checkbox",
theme_path :"/scdeap/scdeap/jsTree/themes/"
},
rules : { draggable : "all", multiple : "ctrl" },
callback : {
beforechange : function (n, t) {
return true;},
onchange : function (NODE, TREE_OBJ) {
if(TREE_OBJ.settings.ui.theme_name == "checkbox") {
var $this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
if($this.children("a.unchecked").size() == 0) {
TREE_OBJ.container.find("a").addClass("unchecked");
}
$this.children("a").removeClass("clicked");
if($this.children("a").hasClass("checked")) {
$this.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
var state = 0;
}
else {
$this.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
var state = 1;
}
$this.parents("li").each(function () {
if(state == 1) {
if($(this).find("a.unchecked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
}
else {
if($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
}
});
}
},
oncreate : function (n, r, h, t) {},
onrename : function (n,l,t,r) {},
onmove : function (n, r, h) {
Panel.move(n,r,h);},
ondelete : function (n) {
$.get("full/server.php?server&type=delete&id=" + n.id);},
onload : function (t) {}
}
});
});
树老是无法显示!
我用firebug跟踪发现
$.ajax({
type : this.settings.data.method,
url : this.settings.data.url,
data : this.settings.data.async_data(false, this),
dataType : "json",
success : function (data) {
data = _this.settings.callback.onJSONdata.call(null, data, _this);
var str = "";
if(data.length) {
for(var i = 0; i < data.length; i++) {
str += _this.parseJSON(data);
}
} else str = _this.parseJSON(data);
_this.container.html("<ul>" + str + "</ul>");
_this.container.find("li:last-child").addClass("last").end().find("li:has(ul)").not(".open").addClass("closed");
_this.container.find("li").not(".open").not(".closed").addClass("leaf");
_this.context_menu.apply(_this);
_this.reselect.apply(_this);
},
error : function (xhttp, textStatus, errorThrown) { _this.error(errorThrown + " " + textStatus); }
});这段函数中的的data的类型为String而不是Object类型,
接着我又跟踪到jquery.js中发现
httpData: function( xhr, type, s ) {
var ct = xhr.getResponseHeader("content-type"),
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
if ( xml && data.documentElement.tagName == "parsererror" )
throw "parsererror";
// Allow a pre-filtering function to sanitize the response
// s != null is checked to keep backwards compatibility
if( s && s.dataFilter )
data = s.dataFilter( data, type );
// The filter can actually parse the response
if( typeof data === "string" ){
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
data = window["eval"]("(" + data + ")");
}
return data;
}
发现data = window["eval"]("(" + data + ")");这段不启作用即data还是string类型
而我通过手动运算window["eval"]("(" + data + ")")时即发现返回值是Object
我想问一下大写有没有遇到过这种情况,如何处理呢
后台返回的数据为:{attributes:30}
return data;
}
我在集成struts2+jquery+jstree+json时发现一个问题
$(function () {
$.ajaxSetup({cache:false});//
var jsTree = $.tree_create();
jsTree.init($("#codeListTree"),{
data:{
async: true,
url : "/scdeap/json/CodeListTree.action",
type:"json"
},
ui:{
theme_name : "checkbox",
theme_path :"/scdeap/scdeap/jsTree/themes/"
},
rules : { draggable : "all", multiple : "ctrl" },
callback : {
beforechange : function (n, t) {
return true;},
onchange : function (NODE, TREE_OBJ) {
if(TREE_OBJ.settings.ui.theme_name == "checkbox") {
var $this = $(NODE).is("li") ? $(NODE) : $(NODE).parent();
if($this.children("a.unchecked").size() == 0) {
TREE_OBJ.container.find("a").addClass("unchecked");
}
$this.children("a").removeClass("clicked");
if($this.children("a").hasClass("checked")) {
$this.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
var state = 0;
}
else {
$this.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
var state = 1;
}
$this.parents("li").each(function () {
if(state == 1) {
if($(this).find("a.unchecked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked");
}
else {
if($(this).find("a.checked, a.undetermined").size() - 1 > 0) {
$(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined");
return false;
}
else $(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked");
}
});
}
},
oncreate : function (n, r, h, t) {},
onrename : function (n,l,t,r) {},
onmove : function (n, r, h) {
Panel.move(n,r,h);},
ondelete : function (n) {
$.get("full/server.php?server&type=delete&id=" + n.id);},
onload : function (t) {}
}
});
});
树老是无法显示!
我用firebug跟踪发现
$.ajax({
type : this.settings.data.method,
url : this.settings.data.url,
data : this.settings.data.async_data(false, this),
dataType : "json",
success : function (data) {
data = _this.settings.callback.onJSONdata.call(null, data, _this);
var str = "";
if(data.length) {
for(var i = 0; i < data.length; i++) {
str += _this.parseJSON(data);
}
} else str = _this.parseJSON(data);
_this.container.html("<ul>" + str + "</ul>");
_this.container.find("li:last-child").addClass("last").end().find("li:has(ul)").not(".open").addClass("closed");
_this.container.find("li").not(".open").not(".closed").addClass("leaf");
_this.context_menu.apply(_this);
_this.reselect.apply(_this);
},
error : function (xhttp, textStatus, errorThrown) { _this.error(errorThrown + " " + textStatus); }
});这段函数中的的data的类型为String而不是Object类型,
接着我又跟踪到jquery.js中发现
httpData: function( xhr, type, s ) {
var ct = xhr.getResponseHeader("content-type"),
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
if ( xml && data.documentElement.tagName == "parsererror" )
throw "parsererror";
// Allow a pre-filtering function to sanitize the response
// s != null is checked to keep backwards compatibility
if( s && s.dataFilter )
data = s.dataFilter( data, type );
// The filter can actually parse the response
if( typeof data === "string" ){
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
data = window["eval"]("(" + data + ")");
}
return data;
}
发现data = window["eval"]("(" + data + ")");这段不启作用即data还是string类型
而我通过手动运算window["eval"]("(" + data + ")")时即发现返回值是Object
我想问一下大写有没有遇到过这种情况,如何处理呢
后台返回的数据为:{attributes:30}
return data;
}
作者: czllfy 发布时间: 2009-09-10
看看这个帖子 jQuery里的ajax的问题,哪位高手能帮忙看看
你的问题一定能解决 。(就在你的帖子下下面不远处)
你的问题一定能解决 。(就在你的帖子下下面不远处)
作者: jjqq 发布时间: 2009-09-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28