2013-01-17 117 views
0

有一些問題讓我的頭繞着JS範圍。我知道它不是AJAX,因爲我已經變成異步:false,但我無法獲得jQuery Promise爲我工作。我真的不明白爲什麼apiData被undefined返回。jQuery AJAX - 範圍和從成功函數返回數據

var url = 'http://www.myjson';  

    /* The API call */ 
    function getData(url) { 

     var text; 

     result = $.ajax({ 
      type: 'GET', 
      url: url, 
      async: false, 
      jsonp: 'callback', 
      dataType: 'jsonp', 
      success: function(data) 
      { 
       text = data; 
       //console logging here returns text data fine 
       return text; 
      } 

     }); 

     return text; 
    } 
    apiData = getData(url); 
    console.log(apiData); 

    //returns undefined for apiData 

回答

3

它看起來並不像同步調用都允許跨域請求。

據jQuery的文檔:

「跨域請求和數據類型:‘JSONP’請求不支持同步操作」

http://api.jquery.com/jQuery.ajax/

我沒有測試過,但也許異步改變在你的情況下爲「真」,因爲你使用jsonp作爲數據類型。因此,在嘗試讀取數據之前,尚未調用onSuccess處理函數。

+0

是的,就是這樣。恥辱沒有錯誤被指出這是事實。謝謝 。 – BobFlemming

0

嘗試這樣

var url = 'http://www.myjson';  

/* The API call */ 
function getData(url) { 

    var text; 

    result = $.ajax({ 
     type: 'GET', 
     url: url, 
     async: false, 
     jsonp: 'callback', 
     dataType: 'json', 
     success: function(data) 
     { 
      text = data; 
      //console logging here returns text data fine 
      return text; 
     } 

    }); 
} 
apiData = getData(url); 
console.log(apiData); 

//returns undefined for apiData 
+0

謝謝,響應需要是jsonp作爲其跨域。 – BobFlemming