2013-05-07 88 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