2015-10-15 2 views
0

Почему это не возвращает значение при вызове функции? Я пробовал его с обратными вызовами, и я не могу заставить его работать. Он позволяет мне console.log, но он просто не вернет его в переменную tmp.Возвращаемое значение ajax для функции

var URL = "https://api.instagram.com/v1/media/popular?client_id=642176ece1e7445e99244cec26f4de1f"; 

function getData(){ 
    var tmp; 
    $.ajax({ 
     type: "GET", 
     url: URL, 
     dataType: "jsonp", 
     success: function(result){ 
      if(result.meta.code == 200){ 
      tmp = result.data; 
      //console.log(result.data); 
      }else{ 
      alert('fail'); 
      alert(result.meta.error_message); 
      } 
     } 
    }); 
    return tmp; 
} 
console.log(getData()); // undefined? 

благодарит заранее!

+0

Чтобы заставить его работать, добавьте prop 'async: false', но я бы не рекомендовал его. – DinoMyte

+1

Если вы установите ** async: false **, скрипт будет блокироваться до тех пор, пока запрос не будет выполнен. Это может повлиять на пользовательский интерфейс пользователя. –

+1

* НЕ добавляйте prop 'async: false', он устарел по причине. Узнайте, как работать с асинхронными операциями вместо – DelightedD0D

ответ

0

Метод ajax является асинхронным. Это означает, что вызывающая функция будет продолжена, не дожидаясь завершения вызова ajax.

Это объясняется более подробно здесь: How do I return the response from an asynchronous call?

0

Я рекомендую вам следующий метод использования Ajax в JQuery

"use strict"; 

var URL = "https://api.instagram.com/v1/media/popular?client_id=642176ece1e7445e99244cec26f4de1f"; 

$.ajax({ 
    type: "GET", 
    url: URL, 
    dataType: "jsonp", 
    success: onInstagramSuccess, 
    error: onInstagramError 
}); 

function onInstagramSuccess(result){ 
    if(result.meta.code == 200){ 
     console.log(result.data); 
    } 
} 

function onInstagramError(result){ 
    if(result.meta.code == 404){ 
     alert('fail'); 
     alert(result.meta.error_message); 
    } 
} 

В основном Ajax в Javascript является асинхронной. Он не будет вызывать метод успеха или отказа до тех пор, пока он не получит результат от запроса.

+0

Извините, мой вопрос - это больше, почему он возвращает неопределенные? когда он возвращает вместо console.log? Спасибо https://jsbin.com/rotuqoceki/edit?js,console – user3224271

+0

Я ответил на это ниже кода. – Jason

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