2013-05-07 53 views
1

我正在嘗試使用JQuery .Deferred/.promise編寫AJAX請求。該函數在頁面加載時被擊中,然後什麼也沒有發生,我無法訪問我的issueData變量。當我運行該函數時,它是未定義的,但我的AJAX調用返回JSON對象。我試圖找出問題是否在issueData.deferred().promise()JavaScript未定義JQuery推遲

function getIssues(issueData) { 
    var issueData = new jQuery.Deferred(); 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     success: function(data) { 
      issueData = data; 
     }, 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
    return issueData.promise();  
} 
+0

後'$返回.ajax',沒有什麼是你的函數執行,所以你永遠不會得到to'return issueData.promise();' – 2013-05-07 18:42:32

+0

看起來好像你試圖使用異步編程,但是然後恢復到像'issueData = data'這樣的東西,它不會幫助你獲得這些數據。 – 2013-05-07 18:43:25

+0

凱文,我也在嘗試,但是我在學習的過程中沒有取得成功。你介意給一個正確的例子或資源?給出的答案仍然返回undefined,所以我想我已經錯誤地構造了一些東西。 – Alexander 2013-05-07 18:59:16

回答

3

你並不需要在這裏使用jQuery.Deferred()$.ajax爲您處理此。你只需要return $.ajax({})。另外,由於AJAX是異步,您的issueData = data;不會做任何有用的事情。

您需要使用回調來獲取返回的數據。

你可以這樣做:

function getIssues() { 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
} 

getIssues().done(function(data){ 
    // use the returned JSON here 
}); 

或者,你可以使用success功能:

function getIssues() { 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     success: function(data){ 
      // use the returned JSON here 
     }, 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
} 

getIssues(); 
2

一個$ .resolve()語句是如何設置我失蹤,你有兩個「迴歸」的說法,第二個「回報」永遠不會到達。

一個解決辦法是這樣的:

function getIssues(issueData) { 
    var deferred = jQuery.Deferred(); 
    $.ajax({ 
    url: 'http://localhost:49650/Issues.svc/GetIssues', 
    type: 'GET', 
    dataType: 'json', 
    success: function(data) { 
     var receivedData = data; 
     ....  
     deferred.resolve(); 
    }, 
    error: function() { 
     alert('Call not resolved') 
    } 
    }); 
    return deferred.promise();  
} 
+0

因爲他沒有從getIssues返回issueData,所以這個解決方案並沒有做任何事情。 – 2013-05-07 18:49:04

+0

完全同意,我將編輯我的示例 – 2013-05-07 18:51:41