+ -
当前位置:首页 → 问答吧 → $.ajax返回值问题

$.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;
    }

作者: czllfy   发布时间: 2009-09-10

看看这个帖子 jQuery里的ajax的问题,哪位高手能帮忙看看
你的问题一定能解决 。(就在你的帖子下下面不远处)

作者: jjqq   发布时间: 2009-09-10

相关阅读 更多