2013-11-29 4 views
0

Я новичок в javascript и имею следующую проблему. Я хочу загрузить некоторый json из api.php и преуспеть с возвращаемым значением, чтобы заполнить мой графический интерфейс.jquery.post и переменная область

$('#data_button').click(function() { 
    $.post('api.php', function(data) { json = data; }); 
    $('#data1').empty().append(json[0].name + ' | ' + json[1].name); 
}); 

Таким образом, я хочу нажать кнопку, затем он извлекает через сообщение некоторые данные и сохраняет их в переменных данных. Как это должен быть объект (объект json?) Я думал, что просто могу использовать его, как указано выше ... Но это не работает. Консоль говорит: не могу найти переменную json.

Любые подсказки?

+0

Это не имеет ничего общего с областью, только с синхронизацией. Пожалуйста, посмотрите [Как вернуть ответ от звонка AJAX?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) –

+1

I Предлагаем вам прочитать об асинхронном программировании и области действия JavaScript. –

ответ

2

Jquery пост по умолчанию работает в асинхронном режиме, что означает, что линии:

$('#data1').empty().append(json[0].name + ' | ' + json[1].name); 

происходит до запроса поста вернулся данными.

это, как это должно быть сделано:

$('#data_button').click(function() { 
    $.post('api.php', function(data) { 
     $('#data1').empty().append(data[0].name + ' | ' + data[1].name); 
    }); 
}); 
+0

Спасибо всем! Было слишком поздно ... и слишком очевидно. – marschro

2

У вас есть добавление за пределами функции обратного вызова. Попробуйте это:

$('#data_button').click(function() { 
    $.post('api.php', function(data) { 
     json = data; 
     $('#data1').empty().append(json[0].name + ' | ' + json[1].name); 
    }); 
}); 
Смежные вопросы