2010-04-19 4 views
0

Je pense que je n'ai pas la syntaxe correcte pour écrire une fonction javascript et l'appeler pour assigner sa valeur de retour à une variable.Appeler et écrire des fonctions jquery/javascript

Ma fonction est:

getObjName(objId){ 
    var objName =""; 
$.ajax({ 
    type : "GET", 
    url : "Object", 
    dataType: 'json', 
    data : "objId="+objId, 
    success : function(data) { 
    objName = data; 
    } 
}); 
    return objName; 
} 

J'essaie de l'appeler et l'assigner à une variable:

var objName = getObjName(objId); 

Cependant Eclipse me dit que « la fonction getObjName (any) est undefined "

Répondre

4

Il y a deux choses qui ne vont pas ici. Tout d'abord, vous devez ajouter function avant getObjName

Deuxièmement, vous ne pouvez pas renvoyer une variable de manière asynchrone. Si vous devez absolument le faire, vous pouvez définir l'ajax comme étant synchrone, mais cela bloquera le thread en cours d'exécution tout le temps que l'appel ajax communique au serveur.

function getObjName(objId){ 
    var objName =""; 
    $.ajax({ 
     async: false, 
     type : "GET", 
     url : "Object", 
     dataType: 'json', 
     data : "objId="+objId, 
     success : function(data) { 
      objName = data; 
     } 
    }); 
    return objName; 
} 
+1

@OP: ** Fortement ** recommande d'éviter les requêtes synchrones, parce que Matt dit, ils bloquent complètement l'interface utilisateur du navigateur. Au lieu de cela, passez une référence de rappel dans la fonction et demandez au gestionnaire de succès ajax d'appeler le rappel. 'getObjName' devient alors (effectivement)' requestObjName' et la réponse revient plus tard. C'est un changement dans votre façon de penser, mais une fois que vous avez compris, c'est vraiment puissant. –

1

doivent déclarer des fonctions avec le mot-clé function:

function getObjName(objId){ 
    //... 
} 

Mais de toute façon, votre code ne fonctionnerait pas. L'appel Ajax est fait de manière asynchrone cela signifie que la fonction getObjName retournera, avant que l'appel Ajax est terminé et sera vide.

Vous pouvez définir votre fonction pour accepter un rappel, par ex. :

getObjName(objId, cb){ 
    $.ajax({ 
     type : "GET", 
     url : "Object", 
     dataType: 'json', 
     data : "objId="+objId, 
     success : cb // <-- call the callback on success 
    }); 
} 

puis plus tard:

var objName; 
getObjName(objId, function(data) { 
    objName = data; // <-- objName refers to the the variable defined 
         // outside this function and gets set 
         // after the Ajax call is finished 
}); 
Questions connexes