2012-03-06 18 views
0

私はgithubからJSONオブジェクトを取得する次のコードを持っていますが、特定の部分を配列に追加するのは難しいです。コールバック関数が実行されていません

function getTree(hash) { 
    var pathToTree, returnedJSON; 
    pathToTree = 'https://api.github.com/repos/myaccount/myrepo/git/trees/' + hash; 
    $.ajax({ 
     accepts: 'application/vnd.github-blob.raw', 
     dataType: 'jsonp', 
     url: pathToTree, 
     success: function (json) { 
      returnedJSON = json; 
     }, 
     error: function (error) { 
      console.debug(error); 
     } 
    }); 
    return returnedJSON; 
} 

function parseTree(hash) { 
    var objectedJSON, objectList = [], i, entry; 
    objectedJSON = getTree(hash, function() { 
     console.debug(objectedJSON);     // this is not appearing in console 
     for (i = 0; i < objectedJSON.data.tree.length; i += 1) { 
      entry = objectedJSON.data.tree[i]; 
      console.debug(entry); 
      if (entry.type === 'blob') { 
       if (entry.type.slice(-4) === '.svg') {  // we only want the svg images not the ignore file and README etc 
        objectList.append(i.content); 
       } 
      } else if (entry.type === 'tree') { 
        objectList.append(parseTree(getTree(entry.sha))); 
      } 
     } 

    }); 
    return objectList; 
} 

$(document).ready(function() { 
    var objects = parseTree('master', function() { 
     console.debug(objects); 
    }); 
}); 

私は、JSONオブジェクトの罰金を取得するコードを持っているが、それは(別名、私が欲しいのビットを引き抜く)解析された取得しようとしたとき、私はトラブルに実行します。私が使用しているコールバックは行っていないようで、誰かがそれを見て私を助けてくれるのだろうかと思っていました。

具体的には、私が選択した関数にコールバックを追加できますか?私はその機能に何かをしなければならないのですか?

答えて

1

私はあなたがそれについてどうやっていくのかを説明するコードを修正しました。

function getTree(hash, cb) { 
    // notice that I copy the callback and hash references to have access to them in this 
    // function's closure and any subsequent closures, like the success and error 
    // callbacks. 
    var pathToTree, returnedJSON, cb = cb, hash = hash; 
    pathToTree = 'https://api.github.com/repos/myaccount/myrepo/git/trees/' + hash; 
    $.ajax({ 
     accepts: 'application/vnd.github-blob.raw', 
     dataType: 'jsonp', 
     url: pathToTree, 
     success: function (json) { 
      returnedJSON = json; 
      // if anything was passed, call it. 
      if (cb) cb(json); 
     }, 
     error: function (error) { 
      console.debug(error); 
      // an error happened, check it out. 
      throw error; 
     } 
    }); 
    return returnedJSON; 
} 

function parseTree(hash) { 
    var objectedJSON, objectList = [], i, entry; 
    objectedJSON = getTree(hash, function (objectedJSON) { 
     console.debug(objectedJSON);     // this is not appearing in console 
     for (i = 0; i < objectedJSON.data.tree.length; i += 1) { 
      entry = objectedJSON.data.tree[i]; 
      console.debug(entry); 
      if (entry.type === 'blob') { 
       if (entry.type.slice(-4) === '.svg') {  // we only want the svg images not the ignore file and README etc 
        objectList.append(i.content); 
       } 
      } else if (entry.type === 'tree') { 
        objectList.append(parseTree(getTree(entry.sha))); 
      } 
     } 

    }); 
    return objectList; 
} 

$(document).ready(function() { 
    var objects = parseTree('master', function() { 
     console.debug(objects); 
    }); 
}); 
1

は限り私はそれを見ることができるように、あなたの関数にコールバックを渡していません。

function getTree(hash) { 

そして、あなたは以下のように使用している:

objectedJSON = getTree(hash, function() { 

同様に、この関数は、コールバックのparamを持っていません。

function parseTree(hash) { 

そして、あなたは以下のように使用されています

var objects = parseTree('master', function() { 

このようなあなたの機能を変更します。

function getTree(hash, fn) { ... } 
function parseTree(hash, fn) { ... } 

そして、必要なときにfn()を使用してfnを呼び出します。

1

getTreeファンクションを追加します。あなたのAjaxのオプションで

function getTree(hash, callback) 

そして "jsopCallback" パラメータを使用するような何か

$.ajax({ 
     ... 
     jsopCallback: callback, 
     ... 
関連する問題