2017-01-25 2 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

при необходимости наружный 'success'' обратный вызов (данные);'? – ZKolya

+0

@ZKolya Вы не можете сделать это, поскольку 'AJAX' является асинхронным. К моменту завершения запроса линия снаружи уже будет выполнена. –

+0

@Sunshanth, okey, спасибо, Я подумаю, как найти решения :) – ZKolya

-1

Из-за асинхронной природы AJAX запросов, если вы хотите, чтобы обработать ответ вам обязательно надо поместить указанный код внутри функции обратного вызова:

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

Вы могли бы рассмотреть возможность разделения кода в функции и вызов этих функций из обратного вызова успеха.

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