获取数据数组成功 ajax



如何在函数ajax后获取数组。我知道这是可能的async false但这不好。我该怎么办?

var visit_time=[];
    var phrase=[];
    $.ajax({
       url: "https://api-metrika.yandex.ru/stat/sources/phrases.json",
       data: {
          id: "111111",
          pretty: "1",
          oauth_token: "code_token"
       },
       dataType: "jsonp",
       success: function(data) {
                var str = "";
                var len = data.data.length
                for (var i = 0; i < len; i++) {
                    visit_time.push(data.data[i].visit_time);
                    phrase.push(data.data[i].phrase)
                }
            alert(phrase)
       }
    });
    //get visit_time and phrase

由于 AJAX 请求的异步性质,如果要处理响应,则必须将所述代码放在回调函数中:

success: function(data){
    // Only this code will have access to the response data. 
}

可以考虑将代码拆分为函数,并从成功回调调用这些函数。

您可以在 ajax 请求成功后执行回调。

function callback(arr) {
    // do something with the array 
    console.log(arr);
}
success: function(data) {
  var str = "";
  var len = data.data.length
  for (var i = 0; i < len; i++) {
    visit_time.push(data.data[i].visit_time);
    phrase.push(data.data[i].phrase)
  }
  callback(data);
}

你也可以使用承诺的想法。

   var visit_time=[];
    var phrase=[];
        function callback(arr) {
              alert(arr)
              console.log(arr);
            }
    $.ajax({
       url: "https://api-metrika.yandex.ru/stat/sources/phrases.json",
       data: {
          id: "11111",
          pretty: "1",
          oauth_token: "token"
       },
       dataType: "jsonp",
       success: function(data) {
                var str = "";
                var len = data.data.length
                for (var i = 0; i < len; i++) {
                    visit_time.push(data.data[i].visit_time);
                    phrase.push(data.data[i].phrase)
                }
             callback(phrase); // You have access here
       }
    });
     callback(phrase); // cannot access it as AJAX is asynchronous.

最新更新