2

我正在尝试使用 jQuery 编写 AJAX 请求.Deferred/.promise。页面加载时该函数被命中,然后什么也没有发生,我无法访问我的issueData变量。当我运行该函数时,它是未定义的,但我的 AJAX 调用返回 JSON 对象。我试图弄清楚问题是否在于我如何设置issueData .deferred().promise()

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();    
}
4

2 回答 2

3

缺少 $.resolve() 语句,并且您有两个“return”语句,第二个“return”永远不会到达。

一个解决方案是这样的:

 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();    
 }
于 2013-05-07T18:46:26.103 回答
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();
于 2013-05-07T19:15:02.687 回答