2015-10-21 2 views
0

я написал мой первый $ .when рутина, но не работает, как ожидалось:

 $(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); 
    }); 

Это работает, но я ожидал, что 4 прибудете бы выпустили одновременно, в то время как Я обнаружил, что выполнены один после того, как предыдущий закончил ... с тех пор является

$ .get

это, конечно, асинхронная ..

что может быть неправильным? Что я должен проверить?

btw, serverside является классическим asp, и запрос находится на той же машине, что и на url.

спасибо за любые подсказки

Джо

+0

Я думаю, вы хотите сказать, что это синхронно, асинхронно, но на самом деле это не имеет смысла. Откуда вы знаете, что они не отправляются немедленно? – charlietfl

+0

'$ .get()' не является синхронным, пока вы не выполнили 'ajaxSetup ({async: false})' –

+0

да, я имею в виду, что он работает синхронно, но $ .get работает только async .. поэтому он не является проблема настроек .. Я вижу, что не обрабатываются одновременно, так как эффекты задерживаются – Joe

ответ

4

Четыре запросы инициируются один за другим, так как Java-код выполняет последовательно. В Javascript нет фактического параллельного выполнения (однопоточное - за исключением webWorkers, которые здесь не задействованы).

Что произойдет, так это то, что все четыре запроса будут «в процессе» одновременно. Когда именно ответы возвращаются, определяется отзывчивость сервера. Некоторые серверы будут обрабатывать только один запрос за раз и заставят ответы возвращаться последовательно, даже если все они были инициированы сразу. Другие серверы будут обрабатывать их по времени (или даже с использованием нескольких процессоров), так что все ответы будут завершены примерно в одно и то же время.

Вы можете проверить время отправки запросов и получение ответов, открыв вкладку сети в отладчике Chrome перед вашей операцией, а затем посмотрев на отображаемую трассировку времени.

+0

Привет, Спасибо за ваш ответ, но я немного смущен .... Я нашел несколько статей, объясняющих, что это был способ получить запрос выполняются одновременно: [link] (https://css-tricks.com/multiple-simultaneous-ajax-requests-one-callback-jquery/) [ссылка] (http://www.codeproject.com/Articles/599349/jQuery-Execute-Run-Multiple-Ajax-Requests-Simultan) [ссылка] (http://stackoverflow.com/questions/561046/how-many-concurrent-ajax-xmlhttprequest-requests-are- разрешено-в-популярном-просматривать) [jsfiddle] (http://jsfiddle.net/jquerybyexample/tS349/) и мой сервер в настоящее время может обрабатывать больше запросов одновременно – Joe

+0

В любом случае .., что может быть решением для обеспечения соблюдения этого ? теперь, когда мне нужно выполнить какой-то процесс быстрее, я запускаю одну и ту же страницу из двух разных браузеров, поэтому Я предполагаю, что ограничения браузера основаны на sessionID: возможно ли с помощью jqyery ajax обрабатывать sessionID? или есть какая-либо другая техника для – Joe

+0

@Joe. Это общая методика для параллельного выполнения нескольких запросов Ajax (если ваш сервер способен это сделать). Если вы можете опубликовать временную шкалу сетевой вкладки из отладчика Chrome при запуске своего кода, мы сможем получить информацию о том, что происходит. В конечном счете, ваш сервер определяет, сколько параллельно они фактически запускаются, поэтому, вероятно, он будет принимать инструментальные средства и отлаживать ваш сервер, чтобы полностью понять ситуацию. – jfriend00

Смежные вопросы