2013-06-28 94 views
2

我需要從jquery ajax調用返回的幫助。jquery ajax範圍問題

這裏是我的了:

var condition = dbCall(km_point['jb'], km_point['kb']);//lat,lng 
console.log(condition); 

的打印的console.log 「未定義」

這裏是dbCall功能:

function dbCall(lat, lng){ 
    $.ajax({ 
    type: "GET", 
    url: 'http://localhost:81/myproject/proxy.php', 
    data: { url: lat + ',' + lng, units: "auto" } 
    }).done(function(data) { 
     if(data != '' && (data)) { 
      var dataJSON = JSON.parse(data); 
      //console.log(dataJSON); 
      return dataJSON; 
     } else { 
      return false; 
     } 
    }); 
} 

我怎樣才能獲得回報備份進入我的調用函數?

+2

歡迎來到**異步**的奇妙世界!你不能那樣做。你應該回報一個承諾。 – SLaks

回答

2

AJAX請求是異步的,這意味着你不能從一個函數內部AJAX調用的響應返回。更好的方法是使用AJAX請求完成後調用的回調函數:

function dbCall(lat, lng, callback){ 
    $.ajax({ 
    type: "GET", 
    url: 'http://localhost:81/myproject/proxy.php', 
    data: { url: lat + ',' + lng, units: "auto" }, 
    dataType: 'json' 
    }).done(function(data){ 
     callback(data); // execute callback function and pass data 
    }); 
} 
+0

爲什麼不只是'.done(callback)'呢? – zeroflagL

+0

@zeroflagL好點,這將工作,但有時你可能想要執行額外的錯誤檢查等執行回調函數之前。 – Seth

3

它是異步的,所以你必須等待結果,只有解決方法是同步ajax,這不是你應該使用的。
更改使用結果在done()回調代碼:

function dbCall(lat, lng){ 
    return $.ajax({ 
     type: "GET", 
     url: 'http://localhost:81/myproject/proxy.php', 
     data: { url: lat + ',' + lng, units: "auto" }, 
     dataType: 'json' 
    }); 
} 

dbCall(km_point['jb'], km_point['kb']).done(function(condition) { 
    console.log(condition); 
});