2010-01-16 12 views
0

Cette fonction utilisera en général ajax calss:

function f_AjaxFunction(_param) { 
    var objectWillReturn; 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson', 
     data: "{_sParam:'" + _param + "'}", 
     dataType: "json", 
     success: function(data) { 
      var txt = ""; 
      try { 
       objectWillReturn = data; 
      } 
      catch (err) { 
       alert(err.description); 
      } 
     } 
    }); 
    return objectWillReturn ; 
} 

Cette fonction appelle l'autre fonction qui est au-dessus:

function f_HavaDurumu(_paramm) { 
     var obj; 
     obj = f_AjaxFunction(_paramm); 
     $("#spanShow").html(obj.d); 
    } 

Répondre

3

Vous devrez utiliser callbacks puisque les appels sont effectués asychronously:

function f_AjaxFunction(_param, callback) { 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: 'WS/wsGenral.asmx/f_QueryAndGetResultAsJson', 
     data: "{_sParam:'" + _param + "'}", 
     dataType: "json", 
     success: function(data) { 
      var txt = ""; 
      try { 
       if($.isFunction(callback(data))){ 
       callback(data); 
       } 
      } 
      catch (err) { 
       alert(err.description); 
      } 
     } 
    }); 
} 

function f_HavaDurumu(_paramm) { 
    f_AjaxFunction(_paramm, function(data){ 
     $("#spanShow").html(data.d); 
    }); 
} 

Je ne peux pas penser à une situation où votre code causerait une erreur dans le bloc Try, mais je l'ai laissé parce que vous aviez là pour commencer avec.

MISE À JOUR

Pour illustrer cet autre:

function get_ajax(){ 
    var ran = false; 
    $.ajax({ 'url':'/some/url', success: function(data){ 
     ran = true; 
    }); 
    return ran; 
} 

alert(get_ajax()); // alerts "false" 

Il est en cours d'exécution dans cet ordre:

  1. Set run-false
  2. Démarrer AJAX demande
  3. Retour run
  4. AJAX terminé, définissez run true

Cependant, si vous utilisez callbacks, vous pouvez garder les choses en ordre pour qu'ils exécutent comme ceci:

  1. Démarrer AJAX Demande
  2. AJAX terminé, exécuter le rappel avec les données de retour
+0

+1 Je ne connaissais pas '$ .isFunction'. –

+0

Comment puis-je définir l'objet de retour à la nouvelle où j'ai appelé la fonction? Je ne peux pas définir => var newObj = f_AjaxFunction ("hihi"); – uzay95

+0

Non, la fonction renvoie immédiatement après l'appel de '$ .ajax' car l'appel est asynchrone et est extrait de la file d'attente d'exécution en cours. Le reste de votre appel doit être traité dans l'événement de rappel ou il s'exécutera * avant * l'envoi de l'appel AJAX. Avoir du sens? –

0

Comme Doug a dit, vous aurez besoin d'utiliser des rappels asynchrones. f_AjaxFunction renvoie avant que les données soient disponibles. Une autre alternative est Javascript Strands.

+0

+1 Cool link ... jamais regardé Strands avant! –

Questions connexes