2017-01-25 55 views
0

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

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 

回答

-1

您可以在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); 
} 

您还可以使用的Promise的想法。

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. 
+0

如果需要外部成功''回调(数据);'? – ZKolya

+0

@ZKolya你不能这样做,因为'AJAX'是异步的。在请求完成时,外线已经执行完毕。 –

+0

@Sunshanth,okey,谢谢, 我会考虑如何找到解决方案:) – ZKolya

-1

由于AJAX请求的异步特性,如果你想处理响应你绝对必须把回调函数内称代码:

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

您可以考虑分割你的代码的功能并从成功回调中调用这些函数。