Получение переменных из $ .get ajax call в jquery - PullRequest
0 голосов
/ 20 мая 2011

Я знаю, что на этом есть МНОГО потоков ... но я плохо отреагировал на ajax и не могу на всю жизнь интерпретировать ответы.

var loadUrl = "lib/php/ajax.php";

$.ajaxSetup ({ cache: false });

$.get(loadUrl +  href, function(data)
{
    var obj = $.parseJSON(data);
    console.log(obj.commentCount, obj.fileName);            
});  console.log(obj.commentCount, obj.fileName); // this one doesn't work.

Как мне получить эти переменные внефункция = / я знаю, что мне нужно использовать какую-то функцию обратного вызова .. или что-то

Ответы [ 4 ]

2 голосов
/ 20 мая 2011

Вы не можете по двум причинам:

  1. Код после $ .get запускается мгновенно.Код внутри функции запускается только после того, как ответ ajax вернет
  2. var obj создается внутри области действия внутренней функции, поэтому недоступен снаружи.

Единственный способ, которым выможно заставить это работать - объявить obj за пределами запроса ajax, присвоить значение внутри функции, а также установить, чтобы запрос ajax не был асинхронным (см. jquery Ajax ). Хотя это своего рода побеждает смысл использованияajax и будет блокировать сайт, пока не вернется результат.

0 голосов
/ 20 мая 2011
var loadUrl = "lib/php/ajax.php";

function processAjaxResponse(obj)
{
  console.log(obj.commentCount, obj.fileName);
};

$.ajaxSetup ({ cache: false });

$.ajax({
    type: 'GET',
    dataType: 'JSON',
    url: loadUrl +  href,
    success: function(data) {
       processAjaxResponse(data);
   }
});
0 голосов
/ 20 мая 2011

Обратный вызов выполняется после завершения вызова ajax. Ваш последний оператор console.log() будет вызван первым, потому что запрос ajax происходит асинхронно. Другая проблема заключается в том, что obj относится к области обратного вызова, что делает его недоступным снаружи. Если вы объявите это вне обратного вызова, он будет доступен, но все еще непригоден из-за первой проблемы. Он будет пустым, пока не завершится вызов ajax. В чем проблема с выполнением работы в обратном вызове?

0 голосов
/ 20 мая 2011

Сначала объявите var obj, вне функции, затем вы можете установить его = для данных внутри и ссылаться на него снаружи.

var loadUrl = "lib/php/ajax.php";
var obj = "";

$.ajaxSetup ({ cache: false });

$.get(loadUrl +  href, function(data)
{
    obj = $.parseJSON(data);
    console.log(obj.commentCount, obj.fileName);            
});
console.log(obj.commentCount, obj.fileName);
...