Данные jQuery из $ .get не доступны другим функциям - PullRequest
1 голос
/ 26 октября 2011

Привет, все, что у меня есть этот кусочек кода, но он продолжает вылетать 'undefined;

var projectID = $.getUrlVar('id');
var projectname;

$.get('functions.php?func=projectname&id='+projectID, function(data) {
    projectname = data;
    alert(projectname+'<- see nice content');
});

alert(projectname+'<- no content :(');

как я могу сделать "имя проекта" доступным вне этой функции get?

(я заметил, что при запуске этого кода на самом деле оповещение об отсутствии контента появлялось перед красивым контентом. Является ли .get последней вещью на странице, которая запускается? Похоже, еще не установлен?

спасибо

Ответы [ 3 ]

5 голосов
/ 26 октября 2011

AJAX работает асинхронно (это то, что означает сначала A в AJAX аббревиатуре).

Итак, у вас есть 2 решения для вашей проблемы:

  1. Не пытайтесь получить доступ к данным вне анонимной функции. Делай всю работу там (лучшее решение)
  2. Измените $.get на $.ajax и установите для его опции async значение false (ужасное решение)
2 голосов
/ 26 октября 2011

Проблема здесь в том, что ваше второе предупреждение фактически выполняется до того, как запрос AJAX завершится.

«A» в «AJAX» обозначает асинхронный.

Любая функциональность, основанная на данных, возвращаемых из запроса AJAX, должна реализовываться только внутри или вызываться с помощью success обратного вызова

0 голосов
/ 26 октября 2011

Поскольку XHR асинхронный, вам это не понравится.

Обрабатывать весь код как функция-потомок , глубже в стеке вызовов с началом от полного обратного вызова (где projectname будет назначено правильное значение).

...