如何在$ .get()函数外部开始使用变量?

时间:2016-05-26 08:49:09

标签: javascript jquery html

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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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>