tsvanharen ответил на вопрос хорошо, но у DCrawmer все еще отсутствует точка. Позвольте мне попытаться разъяснить его. Я упрощаю некоторые из них и сглаживаю некоторые детали.
Посмотрите на приведенный ниже код. Это в значительной степени тот же код, как tsvanharen, за исключением, что я заменил анонимную функцию обратного вызова с фактическим указателем на функцию, и я немного более ясно, так что вы можете увидеть, что происходит:
var x = null;
function myCallback(data)
{
alert("Data Loaded:" + data);
}
$.get("test.php", myCallback);
// the rest of your code
alert("The value of X is: " + x);
Предполагая что test.php занимает даже минуту или две для загрузки, обратите внимание на порядок, что предупреждения, вероятно, пришли в:
1. "The value of X is"
2. "Data Loaded"
функция $.get()
работает мгновенно. JavaScript перемещается и запускает остальную часть вашего кода сразу.На заднем плане он извлекает вашу страницу на test.php. jQuery скрывает некоторые беспорядочные детали этого.
Функция обратного вызова (второй аргумент $.get()
) запускается позже (асинхронно). Или, по другому, функция myCallback
является обработчиком события. Это событие «$.get()
закончило получение данных». Он не запускается до этого момента. Он не запускается при запуске $.get()
! $.get()
просто помнит, где эта функция для последующего использования.
Функция myCallback
может запускаться миллисекундами или через несколько минут, долго после того, как $.get()
было рассмотрено.
Если myCallback
не запускается до тех пор, пока не будет проведено несколько минут, то каково значение x при запуске кода «Значение X»? Это все еще null
. У вас есть ошибка.
Чтобы использовать данные, полученные из страницы в сценарии, вы должны сделать что-то больше, как это:
- Начните свой сценарий, объявить переменную для хранения данных.
- Позвоните
$.get()
, с функцией обратного вызова для обработки возврата.
Ничего не делать. [Или, по крайней мере, ничего, что требует данных] Пусть страница просто сидит там.
... когда-нибудь в будущем ...
X. Ваша функция обратного вызова получит бежать, и есть результаты вашей веб-страницы. Функция обратного вызова может: * Отобразить данные * Присвоить данные переменным * Вызвать другие функции * Идите по нему весело.
так, как вы получать страницы Временное решение не определено? – 2009-08-07 12:31:57
Я обновил свой ответ с помощью подсказки, чтобы помочь устранить непостоянную переменную данных. –
@DCrawmer проверяет, что говорит пиксель. если синтаксический анализ запроса на получение занимает слишком много, лучше взять данные в обратном вызове. на самом деле это правильный способ сделать это. –