2013-05-07 5 views
1

J'essaie d'écrire une requête AJAX en utilisant le JQuery .Deferred/.promise. La fonction est frappée lorsque la page se charge et rien ne se passe et je ne peux pas accéder à ma variable . Lorsque j'exécute la fonction, elle n'est pas définie, mais mon appel AJAX renvoie les objets JSON. J'essaie de savoir si le problème est dans la façon dont je configurer le issueData.deferred() et .promise()JavaScript non défini avec JQuery différé

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

Après 'retour .ajax' $, rien est exécuté dans votre fonction, donc on ne se '' renvoie issueData.promise(); ' –

+0

Il semble que vous essayez d'utiliser la programmation asynchrone, mais revenez ensuite à faire des choses comme' issueData = data' qui ne vous aide pas à obtenir ces données. –

+0

Kevin, j'essaie aussi, mais je n'ai pas réussi mes tentatives en apprenant. Pourriez-vous donner un exemple ou une ressource? La réponse donnée reste non définie donc j'imagine que j'ai mal structuré quelque chose. – Alexander

Répondre

3

Vous n'avez pas besoin d'utiliser jQuery.Deferred() ici, $.ajax poignées pour vous. Vous avez juste besoin de return $.ajax({}). En outre, puisque AJAX est asynchrone, votre issueData = data; ne fera rien d'utile.

Vous devez utiliser les rappels pour obtenir les données renvoyées.

Vous pouvez le faire:

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

Ou, vous pouvez utiliser la fonction 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

déclaration A .resolve $() est manquant et vous avez déclaration de deux « retour », le second « retour » n'est jamais atteint.

Une solution est la suivante:

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

La résolution ne fait vraiment rien puisqu'elle ne renvoie pas issueData de getIssues. –

+0

Tout à fait d'accord, je vais modifier mon exemple –