2

私はこのコードを持っています

var children;
$.ajax({
    url: Routing.generate('snmp_ajax_get_children', {dev: root}),
    async: true, type: "GET"
}).done(function(data) {
    var children = Array(); 
    for(var i in data) {
        children[i] = data[i].split('|');
        for (var j in data[i]) {
            children[i][j] = $.trim(data[i][j]);
        }
    }
    localStorage.setItem('children', children);
});
children = localStorage.getItem(children);
localStorage.removeItem('children');

コールバックからデータを取得するために localStorage (醜い、私は知っています) を使用します。他のアプローチは私にはうまくいきませんでした (理由はわかりません)。

4

2 に答える 2

3

非同期 ajax を使用しているため、完了が実際に完了するまで、応答の結果を要求することはできません。このようなことを達成するには、次のようにします。

// receiving data
function getData( callback ) {
    $.ajax({
        url: Routing.generate('snmp_ajax_get_children', {dev: root}),
        async: true, type: "GET"
    }).done(function(data) {
        // is async, so it takes some time until this is triggered...
        // I don't know your response but I think children should be 
        // an object: 
        // var children = {};
        var children = Array(); 
        for(var i in data) {
            children[i] = data[i].split('|');
            for (var j in data[i]) {
                children[i][j] = $.trim(data[i][j]);
            }
        }
        // calling your data handler with the data
        callback( children );
    });
}

// your data handler
function handleData( data ) {
    // do whatever

} 


// call the action, setting the callback
getData ( handleData );
于 2013-02-14T07:30:49.220 に答える
0

「children」変数が2回定義されているためです。

ご存じのとおり、関数にはローカル変数用の独自のコンテキストがあります。変数をvarで定義すると、それは関数コンテキストに属します (同じ名前を使用しても...)

}).done(function(data) {
    var children = Array(); 
    // ...

この状況では、コールバックの終了時にchildren変数が閉じられます。外側の「子」にアクセスするための 2 番目のvar構文を削除しましょう。

}).done(function(data) {
    children = Array(); 
    // ...
于 2013-02-14T07:28:44.977 に答える