2014-01-09 53 views
1

我想知道是這些是任何方式來訪問一個jquery ajax調用的結果以傳統的var設置爲功能時尚的形式。例如考慮:訪問JQuery字符串以外的JQuery的Ajax調用

function getPoints(){ 
     //An array of JSON objects 
     var Points; 

     $.ajax({ 
      url: "js/retrievePointsDataJson.php", 
      dataType:'json', 
      type: 'POST', 
     }).done(function(data){ 
      //console.log(data); 
      Points.append(data); 
     }); 

     console.log(Points); 
     return Points; 
    } 

註釋掉console.log顯示json對象的數組,而外部的則沒有。現在,我嘗試了這一點:

var Points = $.ajax({ ...}); 

而且我在一個較大的對象中看到響應文本,但不確定如何訪問responseText。 console.log(Points.responseText)產生一個未定義的變量。 這種方法可能嗎? Here是另一個收到帶有類似問題的複選標記的問題。

我有另一種解決方案,它是封裝我的代碼在done()函數內,我將有權訪問我的所有數據。我只是好奇,如果我試圖做的甚至是可行的。

謝謝。

+0

[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – adeneo

回答

1

是的,但是,您必須先等待請求完成才能完成。但是,由於您無法有效強制return等待數據存在,您只能選擇返回延遲對象,或者以允許接受回調的方式重寫函數。

function getPoints(){ 
    return $.ajax({ 
     url: "js/retrievePointsDataJson.php", 
     dataType:'json', 
     type: 'POST' 
    }); 
} 
getPoints().done(function(data){ 
    console.log(data); 
}); 

function getPoints(callback){ 
    return $.ajax({ 
     url: "js/retrievePointsDataJson.php", 
     dataType:'json', 
     type: 'POST', 
     success: callback 
    }); 
} 
getPoints(function(data){ 
    console.log(data); 
}); 
0

您在外部函數中調用的日誌與未定義的變量一起工作,因爲該函數是異步的。你不能從getPoints中返回它,因爲它不會完成。任何使用Points變量的工作都需要在回調中發生(傳遞給完成的函數)。

1

因爲Ajax調用是異步完成的,你不應該從外部函數返回。這需要你以某種方式阻塞,直到異步調用完成。相反,您可以將回調函數傳遞給getPoints函數,該函數將處理使用點的邏輯。

function getPoints(callback){ 
    $.ajax({ 
     url: "js/retrievePointsDataJson.php", 
     dataType:'json', 
     type: 'POST', 
    }).done(function(data){ 
     callback(data); 
    }); 
} 

了Ajax的異步特性可以使事情更難,如果您使用命令式編程,但它會讓你的用戶界面更爲敏感。

+0

這很好。這被認爲是一個承諾? – Jim22150