在jQuery中,如何在其他类方法中使用返回的JSON对象?

时间:2010-08-27 17:01:33

标签: jquery json

我在js / jQuery中构建了一个类:

function JSONRequest(request_id, type){
    this.request_id = request_id;
    JSONsvc ='json_dispatch.php';
    this.type = type;
}

JSONRequest.prototype.query = function() {
    $.getJSON(JSONsvc,
            {request_id:this.request_id, type:this.type},
            function(data) {
                return data;
            }           
    );  
}
JSONRequest.prototype.buildKeyValues = function(data) {
    $.each(data.items, function(i,item){
        //$('textarea').text(item.comment); //hack
        $.each(item, function(j,key){
            $("#"+j).val(key);
        })
    })
}

JSONRequest.prototype.buildTableRows = function(data) {
    var tbodyContainer;
    tblRows = "";
    $.each(data.items, function(i,row){ 
        tblRows += "<tr>";      
        $.each(row, function(j,item){   
            tblRows +="<td>"+item+"</td>";
        })
        tblRows += "</tr>";
    })
    return tblRows;
}

我这样用:

var e = new JSONRequest(this.id,this.type);
e.query();
alert(e.data); //returns Undefined

如何获取返回的JSON对象以用于我的其他类方法?

1 个答案:

答案 0 :(得分:0)

你无法真正从这样的回调中返回数据。您遇到的另一个更严重的问题是getJSON是异步的。所以你应该做的是在你的query函数中传递一个回调,这样你就可以访问这样的数据:

JSONRequest.prototype.query = function(callback) {
    $.getJSON(JSONsvc,
            {request_id:this.request_id, type:this.type},
            function(data) {
                if(callback) {
                   callback(data);
                }                    
            }           
    );  
};

然后:

var e = new JSONRequest(this.id,this.type);
e.query(function(data) {
   alert(data);
});

应该有用。