2010-08-09 7 views
1

S'il vous plaît aider, j'ai regardé cela toute la journée et je sais qu'il doit y avoir une solution simple!Passer une valeur de retour

Comment renvoyer les résultats à textService pour que je puisse effectuer un appel tel que textResult = textService (texte à transmettre);

Je ne veux pas utiliser une variable globale si je peux l'éviter. Voici le code

function textService(text){ 
req.open("GET", "http://....?text="+text, true); 
req.onload = showResults; 
req.send(null); 
} 

function showResults() { 
results = req.responseXML.getElementsByTagName("Result"); 
} 

Nous vous remercions à l'avance

Répondre

0

Vous pouvez utiliser ce

function showResults() { 
    results = this.responseXML.getElementsByTagName("Result"); 
} 
2
function textService(text){ 
    // set flag to false for sync requests 
    req.open("GET", "http://...?text="+text, false); 
    req.send(null); 
    // browser will be stalled till request is complete. 
    if(req.status == 200 && req.readyState == 4) { 
     return req.responseXML.getElementsByTagName("Result"); 
    } else { 
     return 'request failed'; 
    } 
} 
// javascript will stall till request is complete. 
var results = textService('someText'); 

Remarque, ce qui rend la demande synchrone peut être nocif, si une requête échoue, il pourrait bloquer le navigateur indéfiniment. Il est préférable de le faire de manière asynchrone.

function textService(text, callback){ 
    // async is true by default, no need to pass 3rd param. 
    req.open("GET", "http://...?text="+text); 
    req.send(null); 
    req.onreadystatechange = function(){ 
     if(this.readyState == 4 || this.status == 200) { 
      callback(this.responseXML); 
     } 
    } 
} 
textService('someText', function(xml){ 
    // do stuff with XML. 
}); 

juste besoin changer votre esprit de codage à la programmation async;)