2016-05-26 3 views
0
var userIdD = $.get('http://someurl.com/options.php', function(abc) { 
    var abc = $(abc); 
    var link = $(abc).find('a:contains(View My Profile)'); 
    //console.log (link); 
    var userID = $(link).attr('href'); 
    var userId = $(userID); 
    console.log(userId); 
    console.log(userID); 
}); 

console.log(userIdD); 
console.log(userId); 

Не могу использовать переменные «userIdD» & «userId» внешняя функция «abc». Внутри, он работает очень. Может кто-нибудь помочь мне использовать их за его пределами? где я ошибаюсь?

+2

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/ 14220321/how-do-i-return-the-response-from-a-асинхронный вызов) –

ответ

0

Объявите переменные вне функции:

var userID, userId; 
var userIdD = $.get('http://someurl.com/options.php', function(abc) { 
    var abc = $(abc) 
    var link = $(abc).find('a:contains(View My Profile)') 
    //console.log (link) 
    userID = $(link).attr('href'); 
    userId = $(userID) 
    console.log(userId) 
    console.log(userID) 
}) 
console.log(userIdD) 
console.log(userId) 
+0

он все равно возвращает значение переменной «undefined», а также появляется «c.extend.ajax jquery-1.4.2.min .js: 130 c.extend.get jquery-1.4.2.min.js: 122 (анонимная функция) " ошибки – BuZZinga

0

Проблема заключается в том, что userIdD устанавливается асинхронно. Вещь, которая происходит внутри вызова функции, происходит после материала вне вызова функции.

Вот упрощенный пример, который вы можете запустить:

$.get('http://jsonplaceholder.typicode.com', function(){ 
 
    alert('Stuff inside function happening'); 
 
}); 
 

 
alert('Stuff outside function happening');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Теперь, если мы посмотрим на код, мы увидим, что вы пытаетесь console.log переменные, установлены внутри вызов функции.

Чтобы обойти асинхронность, вы можете использовать обещания. Давайте посмотрим, как это работает ...

var valuesPromise = $.get('http://jsonplaceholder.typicode.com').then(function(serverResponse){ 
 
    return { objectId: 123 }; // return stuff you want to use later 
 
}); 
 

 
// later in your code, you can make use of the returned value... 
 

 
valuesPromise.then(function(returnedValue){ 
 
    alert(returnedValue.objectId); // alerts '123' 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Это не помогает мне ... Требуется еще одна ошибка" TypeEr ror: Объект # не имеет метода 'then' " U может выглядеть кодом, который я сделал верхним – BuZZinga

Смежные вопросы