Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript can';不要让我的变量将其值保留在getJSON之外_Javascript_Jquery_Json - Fatal编程技术网

Javascript can';不要让我的变量将其值保留在getJSON之外

Javascript can';不要让我的变量将其值保留在getJSON之外,javascript,jquery,json,Javascript,Jquery,Json,嗨,这个代码有问题。我的问题是第一个console.log(smile\u per\u sec)给了我所需的值,但第二个给了我声明变量时所给的值 $.getJSON( twitter_api_url + '?callback=?&rpp=100&q=text::)', function(data) { $.each(data.results, function(i, tweet) { //console.log(tweet);

嗨,这个代码有问题。我的问题是第一个
console.log(smile\u per\u sec)
给了我所需的值,但第二个给了我声明变量时所给的值

  $.getJSON( 
    twitter_api_url + '?callback=?&rpp=100&q=text::)',
    function(data) {
      $.each(data.results, function(i, tweet) {
        //console.log(tweet);
        // Before we continue we check that we got data
        if(tweet.text !== undefined) {
        //here we save the time of our happy tweet
          var date_tweet = new Date(tweet.created_at);
          per_sec[i] = date_tweet/1000;
          //console.log(per_sec[i]);
        }
      });

      //here we calculate how manny happy tweets the world tweets per second
        smile_per_sec = 100/(per_sec[0]-per_sec[98])
        $('#tweet_container').append(smile_per_sec + "<br>");   
          console.log(smile_per_sec);
          return smile_per_sec;
    }
  );
console.log(smile_per_sec);
$.getJSON(
twitter_api_url+'?回调=?&rpp=100&q=text::),
功能(数据){
$.each(data.results,function(i,tweet){
//console.log(tweet);
//在我们继续之前,我们检查一下我们是否得到了数据
if(tweet.text!==未定义){
//在这里,我们节省了快乐推特的时间
var date_tweet=新日期(tweet.created_at);
每秒[i]=推送日期/1000;
//控制台日志(每秒[i]);
}
});
//这里我们计算manny happy每秒向全世界发送推文的次数
微笑每秒=100/(每秒[0]-每秒[98])
$(“#tweet_container”)。追加(微笑每秒+”
”; 控制台日志(微笑每秒); 每秒返回一次微笑; } ); 控制台日志(微笑每秒);

这可能是一个很容易解决的问题,但仍然非常感谢您的帮助。

我想您希望在我在下面注明的两个地方进行比较:

$.getJSON( 
  twitter_api_url + '?callback=?&rpp=100&q=text::)',
  function(data) {
    $.each(data.results, function(i, tweet) {
      //console.log(tweet);
      // Before we continue we check that we got data
      if(tweet.text !== undefined) {
        //here we save the time of our happy tweet
        var date_tweet = new Date(tweet.created_at);
        per_sec[i] = date_tweet/1000;
        //console.log(per_sec[i]);
      }
    });
    //here we calculate how manny happy tweets the world tweets per second
    smile_per_sec = 100/(per_sec[0]-per_sec[98])
    $('#tweet_container').append(smile_per_sec + "<br>");   
    ///////////////////////////////////////////////
    //  this is place one
    ///////////////////////////////////////////////
    console.log(smile_per_sec);
    return smile_per_sec;
  }
);
///////////////////////////////////////////////
// this is place two
///////////////////////////////////////////////
console.log(smile_per_sec);
这两者实际上“同时”运作。getJSON中发生的事情在完成之前会一直卡在backburner上,让您的页面继续做事情。因此,console.log只是继续运行并弹出,但是后台还没有回到前台,水还没有沸腾。因此,在水沸腾之前(可能是10毫秒,可能是3分钟),你不能用水做任何事情,或者用水中的面条做任何事情,或者别的什么

我意识到一开始这很难掌握,但一旦你掌握了这一点,你就会掌握整个ajax

要回答“我如何让它完成所有工作”的问题,答案是如下重新构造代码:

// Here we've made this a named function, and allowed the function to be more neatly encapsulated
function twitterCallback(data) {
  $.each(data.results, function(i, tweet) {
    //console.log(tweet);
    // Before we continue we check that we got data
    if(tweet.text !== undefined) {
      //here we save the time of our happy tweet
      var date_tweet = new Date(tweet.created_at);
      per_sec[i] = date_tweet/1000;
      //console.log(per_sec[i]);
    }
  });
  //here we calculate how manny happy tweets the world tweets per second
  smile_per_sec = 100/(per_sec[0]-per_sec[98])
  $('#tweet_container').append(smile_per_sec + "<br>");   

  console.log(smile_per_sec);
  return smile_per_sec;

  ///////////////////////////////////////////////
  //  this is where you put stuff that has to wait on twitter to return
  ///////////////////////////////////////////////

}

$.getJSON( 
  twitter_api_url + '?callback=?&rpp=100&q=text::)',
  twitterCallback
);
//在这里,我们将此函数命名为一个命名函数,并允许对该函数进行更整洁的封装
函数twitterCallback(数据){
$.each(data.results,function(i,tweet){
//console.log(tweet);
//在我们继续之前,我们检查一下我们是否得到了数据
if(tweet.text!==未定义){
//在这里,我们节省了快乐推特的时间
var date_tweet=新日期(tweet.created_at);
每秒[i]=推送日期/1000;
//控制台日志(每秒[i]);
}
});
//这里我们计算manny happy每秒向全世界发送推文的次数
微笑每秒=100/(每秒[0]-每秒[98])
$(“#tweet_container”)。追加(微笑每秒+”
”; 控制台日志(微笑每秒); 每秒返回一次微笑; /////////////////////////////////////////////// //这就是你在推特上放置那些需要等待才能返回的东西的地方 /////////////////////////////////////////////// } $.getJSON( twitter_api_url+'?回调=?&rpp=100&q=text::), 推特回调 );
。这就是类比的问题。人们应该期望类比是粗糙的,而不是完美的;-)你也可以使用
.done
.when
/
,then
,等等。哪种技术最有意义取决于几个因素。不,我们不能,因为它是邪恶的<代码>。当等只是承诺时,无论如何都要封装。非常感谢。这很有帮助。
// Here we've made this a named function, and allowed the function to be more neatly encapsulated
function twitterCallback(data) {
  $.each(data.results, function(i, tweet) {
    //console.log(tweet);
    // Before we continue we check that we got data
    if(tweet.text !== undefined) {
      //here we save the time of our happy tweet
      var date_tweet = new Date(tweet.created_at);
      per_sec[i] = date_tweet/1000;
      //console.log(per_sec[i]);
    }
  });
  //here we calculate how manny happy tweets the world tweets per second
  smile_per_sec = 100/(per_sec[0]-per_sec[98])
  $('#tweet_container').append(smile_per_sec + "<br>");   

  console.log(smile_per_sec);
  return smile_per_sec;

  ///////////////////////////////////////////////
  //  this is where you put stuff that has to wait on twitter to return
  ///////////////////////////////////////////////

}

$.getJSON( 
  twitter_api_url + '?callback=?&rpp=100&q=text::)',
  twitterCallback
);