2015-10-21 1 views
0

j'ai écrit ma première routine .Lorsque $, mais ne fonctionne pas comme prévu:

 $(document).ready(function() 
    { 
     var UserUrl = 'API/StartGetUser.asp'; 
     var StoreUrl = 'API/StartGetStore.asp'; 
     var FeedbackUrl='API/StartGetFeed.asp'; 
     var ItemsUrl='API/StartGetSellers.asp'; 
    $.when(
     $.get(UserDetailsUrl), 
     $.get(StoreCategoryUrl), 
     $.get(FeedbackUrl), 
     $.get(ItemsUrl) 
    ).then(function(user,store,feed,items) { 
     //$.get(mailUrl) 
     alert(user+' '+store+' '+feed+' '+items); 
    }).fail(function(err) { 
     alert(err); 
    }); 

Il fonctionne, mais je me attendais que le 4 get aurait tiré en même temps, alors que J'ai trouvé que sont exécutés l'un après l'ancien a fini ... depuis est

.get $

est sûrement .. async

qu'est-ce qui ne va pas? Que dois-je vérifier?

btw, serverside est ASP classique et la demande sont sur la même machine que peut voir de l'URL.

merci pour toutes les allusions

Joe

+0

Je pense que vous voulez dire que c'est synchrone et non asynchrone, mais cela n'a pas vraiment de sens. Comment savez-vous qu'ils ne sont pas envoyés immédiatement? – charlietfl

+0

'$ .get()' n'est pas synchrone tant que vous n'avez pas fait un ajaxSetup ({async: false}) ' –

+0

oui je veux dire qu'il semble fonctionner de manière synchrone, mais $ .get fonctionne seulement async .. donc ce n'est pas un problème de réglages .. Je vois ne sont pas traitées simultanément puisque les effets sont retardés – Joe

Répondre

4

Les quatre demandes sont lancées l'une après l'autre parce que Javascript exécute séquentiellement code. Il n'y a pas d'exécution parallèle réelle en Javascript (c'est un seul thread - sauf pour les webWorkers qui ne sont pas impliqués ici).

Ce qui va se passer ici, c'est que les quatre requêtes seront "en cours" en même temps. Quand exactement les réponses reviennent est déterminé par la réactivité du serveur. Certains serveurs ne traiteront qu'une seule requête à la fois et feront revenir les réponses de manière séquentielle, même si elles ont toutes été lancées en même temps. D'autres serveurs les traiteront en tranches temporelles (ou même en utilisant plusieurs processeurs) de sorte que toutes les réponses soient terminées à peu près au même moment.

Vous pouvez vérifier le moment de l'envoi des demandes et la réception des réponses en ouvrant l'onglet réseau dans le débogueur Chrome avant votre opération, puis en regardant la trace temporelle qu'il affiche.

+0

Salut, Merci pour votre réponse, mais je suis un peu confus .... J'ai trouvé plusieurs article expliquant que c'était la façon d'obtenir la demande d'être exécuté simultanément: [lien] (https://css-tricks.com/multiple-simultaneous-ajax-requests-one-callback-jquery/) [link] (http://www.codeproject.com/Articles/599349/jQuery-Execute-Run-Multiple-Ajax-Requests-Simultan) [lien] (http://stackoverflow.com/questions/561046/how-many-concurrent-ajax-xmlhttprequest-requests-are- permis en populaire-browse) [jsFiddle] (http://jsfiddle.net/jquerybyexample/tS349/) et mon serveur ne peut gérer plus demande simultanément – Joe

+0

De toute façon .. qui peut être la solution à appliquer cette ? Maintenant, quand j'ai besoin d'exécuter un processus plus rapidement, je tire la même page de 2 navigateurs différents, donc Je suppose que les limites du navigateur sont basées sur sessionID: est-il possible avec jqyery ajax de gérer sessionID? ou est-il une autre technique à – Joe

+0

@Joe - C'est la technique générale pour obtenir plusieurs demandes Ajax fonctionnant en parallèle (si votre serveur est capable de le faire). Si vous pouvez publier la chronologie de l'onglet Réseau à partir du débogueur Chrome lors de l'exécution de votre code, nous pourrons peut-être obtenir des informations sur ce qui se passe. C'est en fin de compte votre serveur qui détermine combien de temps en parallèle ils s'exécutent donc il faudra probablement de l'instrumentation et du débogage sur votre serveur pour bien comprendre les choses. – jfriend00