2011-10-17 4 views
1

J'utilise prototype.js pour faire une requête Ajax. Tout fonctionnait bien jusqu'à ce que j'ai changé asynchronous à false (Comme je veux faire des demandes synchrones). Voici les quelques lignes de mon code.Ajax ne fonctionne pas de manière synchrone

var commOptions = { 
       contentType: 'text/xml', 
       method: 'post', 
       asynchronous: true, 
       evalJS: false, 
       evalJSON: false 
      }; 
    sProxy_Url = sUrl; 
    new Ajax.Request(sProxy_Url, commOptions); 

Si je change asynchronous à false alors Ajax ne fonctionne pas. Est-ce que je manque quelque chose?

+1

définir ne fonctionne pas parce que cela fonctionne ici http://jsfiddle.net/HRu78/ – Esailija

+0

@Esailija: L'appel I Ajax donne une réponse HTML. Si je change «asynchrone» en «faux», je n'ai vu aucune réponse. – xyz

+0

Ajoutez le code où vous êtes censé gérer la réponse à votre question, car jsfiddle fonctionne correctement avec le code que vous avez donné. – Esailija

Répondre

1

Honnêtement, je ne vois pas ce qui ne fonctionne pas, j'ai même eu la réponse en javascript pour vous assurer que:

var commOptions = { 
       contentType: 'text/xml', 
       method: 'post', 
       asynchronous: false, 
       evalJS: false, 
       evalJSON: false 
      }; 

    var a = new Ajax.Request("/", commOptions); 
console.log(a.transport.responseText.length); //16898 

http://jsfiddle.net/HRu78/1/

+0

Ça a marché, c'était mon erreur. – xyz

+2

Je suis content que vous l'ayez fait fonctionner. Je ne vous dis pas comment concevoir votre application, mais dans mon expérience, chaque fois que j'ai pensé que je devais absolument utiliser synchrone, il est toujours avéré qu'il y a une façon asynchrone de faire les choses qui est mieux. – tinyd

+0

Je vais essayer de le faire de manière asynchrone. Merci pour la suggestion. – xyz

0

Il est à peu près toujours recommandé de rendre les requêtes ajax asynchrones car les rendre synchrones bloquera le thread JavaScript principal, ce qui fournit une expérience utilisateur médiocre (voir this). Cependant, si vous voulez vraiment utiliser l'option synchrone, vous devez être un peu plus clair sur ce qui se passe lorsque vous exécutez le code - le navigateur bloque-t-il? Ou la fonction revient-elle mais sans données?

+0

Je dois l'utiliser de manière synchrone. Lorsque je fais un appel synchrone, j'obtiens une réponse sans données. – xyz

+0

Par "vous aurez besoin d'être un peu plus clair" Je pense que tinyd signifiait qu'il aurait besoin de savoir quelle propriété vous lisez, ce que le code d'état HTTP renvoyé était, probablement même coller tout le code approprié. Combien de temps cela prend-il pour ne pas travailler - est-ce instantané? – thomasrutter

+0

@thomasrutter - oui, c'est ce que je voulais dire! Ajinkya - Il serait intéressant de regarder dans les journaux Firebug (ou Chrome, ou IE) pour voir si la demande est envoyée. Aussi, pouvez-vous dire dans quels navigateurs vous voyez l'erreur? – tinyd

Questions connexes