2017-04-13 5 views
0

Mon besoin est de retourner des données en utilisant la fonction "SetUnit()" mais cette fonction contient des services AJAX asynchrones, donc j'utilise Différé suggéré dans ce lien (http://jsfiddle.net/b69ubLa0/21/). mais cela ne fonctionne pas sur mes besoins.La fonction AJAX ne fonctionne pas avec l'objet différé

code ......

Fonction

function SetUnit(query) { 
      var $q = new $.Deferred(); 
      var oData = []; 
      var filter = JSON.stringify({ 'param': query }); 
      $.ajax({ 
       type: "POST", 
       url: '../WebService.asmx/ExecuteReader', 
       contentType: "application/json; charset=utf-8", 
       data: filter, 
       dataType: "json", 
      }).fail(function (jqXHR, textStatus, errorThrown) { 
       $q.reject(jqXHR, textStatus, errorThrown); 
      }).done(function (data, textStatus, jqXHR) { 
       return $q.resolve(data); 
      }); 
      return $q.promise(); 
     } 

Appel Fonction 1

var oUNIT_NAME = SetUnit(query).done(function (data) { return data; }); 

Appel Fonction 2

var oUNIT_NAME = SetUnit(query); 

fonction d'appel utilisant 2 style.

Et cette variable "oUNIT_NAME" est utilisée pour lier de nombreuses listes déroulantes.

Services Retour JSON OBJET

[{id:1,name:a},{id:1,name:a},{id:1,name:a},{id:1,name:a}] 

Note: cela fonctionne si je suis ajouter (async: false) dans un cadre AJAX mais pas une bonne pratique et ce bloc mon interface utilisateur.

+0

Vous avez enregistré avec succès une promesse dans la variable 'oUNIT_NAME', mais il semble que vous voulez' oUNIT_NAME' de tenir une valeur résolue, pas une promesse objet, correct? La solution consiste à définir 'oUNIT_NAME' dans le rappel' done'. Cela peut être une copie de [Comment renvoyer la réponse d'un appel asynchrone?] (Http://stackoverflow.com/q/14220321/710446) – apsillers

+0

Cochez cette case pour plus de détails. Je mets à jour mon code mais ne fonctionne toujours pas. .. URL: https://github.com/mistic100/jQuery-QueryBuilder/issues/466. aidez s'il vous plaît. –

+0

Votre exemple "Call Function 1" est-il exécuté? C'est à dire: si vous faites SetUnit (requête) .done (fonction (données) {alerte (données);}); 'est-ce que la valeur est alertée? Si c'est le cas, vous avez juste besoin de faire tout votre travail dans le rappel, ou dans une autre fonction appelée depuis le rappel. – apsillers

Répondre

0

J'espère que cela aide. Je ne suis pas un pro sur les objets différés mais je crois que cela fait ce dont vous avez besoin.

mis à jour

Working Fiddle

var oUNIT_NAME = {}; 
function SetUnit(query) { 
    var $q = new $.Deferred() 
    $q.promise(oUNIT_NAME); 
    oUNIT_NAME.done(function(data) { 
     //Bind your dropdowns 
     alert(JSON.stringify(data)); 
    }).fail(function(jqXHR, textStatus, errorThrown) { 
     //Alert user 
     alert(errorThrown); 
    }); 
    var oData = []; 
    var filter = { 
     json: JSON.stringify({ 
      data: query 
     }) 
    }; 
    return $.ajax({ 
     cache: false, 
     type: "POST", 
     url: '/echo/json/', 
     data: filter, 
     dataType: "json" 
    }).fail(function(jqXHR, textStatus, errorThrown) { 
     $q.reject(jqXHR, textStatus, errorThrown); 
    }).done(function(data, textStatus, jqXHR) { 
     $q.resolve(data); 
    }); 
} 

SetUnit({ 
    param: 123 
}) 
$("button").click(function() { 
    SetUnit({ 
     param: 456 
    }) 
}); 
+0

Hay merci - Ceci est vraiment utile pour moi, je vous remercie de l'aide merci beaucoup ... –

+0

@AbhishekTomar Si cela répond à votre question, veuillez la marquer comme acceptée :) – Ergec

+0

Désolé - Je suis nouveau sur Stackoverflow. comment accepter les réponses. et ceci est très aide complète pour moi .... –