javascript
  • jquery
  • 2017-04-01 8 views 0 likes 
    0

    でコールバックを呼び出す方法を私は次のコールバックがありますjQueryの - getjson

    var getData = function (callback) { 
    
        var id = $("#Id").val(); 
    
        if (id.length === 0) 
         return; 
    
        $.getJSON('api/data' + '?id=' + id) 
        .done(function (data) { 
         callback(data); 
        }).fail(function (jqXHR, textStatus, err) { 
         return; 
        }); 
    
    } 
    

    私は次のようにそれを呼び出すようにしようとしていた:

    var id = 123; 
    getData(function() { 
        //TO DO: check if id exist in data 
        console.log(data); 
    }); 
    

    しかし、私はreference error: data is not definedを取得します。 ajaxリクエストによって返されるデータを取得するにはどうすればよいですか。私はあまりにもコールバックに精通していないので、私はまだそれらを把握しようとしているように私に耐える。

    答えて

    0

    callback(data)を実行するときは、渡された関数をgetDataと呼びます。コール中に1つの引数を渡しました。つまり、渡された関数にアクセスできるように1つの引数が存在する必要があります。単純に実行します。

    getData(function (data) { 
         console.log(data); 
    }); 
    

    本当に何が起こっているかのコールバックがあり、何をより良く理解するために、のは、単純な形式にそれを書き直してみましょう。

    function getData(callback) { 
    
        var id = $("#Id").val(); 
    
        if (id.length === 0) 
         return; 
    
        $.getJSON('api/data' + '?id=' + id) 
        .done(function (data) { 
         // 2. All that getData is doing is call that function using the 
         // reference you sent when it's done. Like any other function 
         // you can pass it arguments. 
         getDataCallback(data); 
        }).fail(function (jqXHR, textStatus, err) { 
         return; 
        }); 
    
    } 
    
    function getDataCallback(message){ 
        // 3. Like any other function, to access the arguments passed, you need 
        // to name your arguments. 
        console.log(message); 
    } 
    
    var id = 123; 
    
    // 1. All you are doing really is pass a reference to a function to getData 
    getData(getDataCallback); 
    

    ここでコードが失敗したのはconsole.logです。外部のスコープであっても、どこにも定義されていないdataにアクセスしようとしました。これは、getDataCallbackの引数からmessageを削除するのと同じです。

    +0

    これが失敗した場合のコールバックの動作console.logに何か表示されますか? – adam78

    関連する問題