2013-06-13 1 views
2

Мне нужно, чтобы 2 запроса ajax были завершены, прежде чем запускать функцию обратного вызова RUN_ACTIONS() первого запроса, но как ждать его (оптимизировать темп ожидания)?Ожидание 2 запроса AJAX для завершения (d3.js) whit оптимизировать время ожидания?

function ajax() { 
d3.tsv(ajaxUrl, 
     function(data) { 
      while (!secondAJAXQueryComplet()); 
      RUN_ACTIONS(HEADER, data); 
     } 
); 
    d3.json(ajaxUrl, 
     function(header) { 
      define_Header(header); 
     } 
); 
} 
+1

Или использовать очередь Майка Босток в: https://github.com/mbostock/queue – PhoebeB

ответ

1

С помощью этого кода я запустить 2 AJAX запросов Simultanious и ждать последнего ответа, прежде чем запускать мои функции обратного вызова RUN_ACTIONS (). но этот метод не кажется мне очень элегантным

function ajax() { 
    var ready=false, 
     datatsv=false; 

    d3.tsv(ajaxUrl, 
     function(data) { 
      if (ready) 
       RUN_ACTIONS(HEADER, data); 
      else { 
       ready=true; 
       datatsv=data; 
      } 
     } 
    ); 
    d3.json(ajaxUrl, 
     function(header) { 
      define_Header(header); 
      if (ready) 
       RUN_ACTIONS(header, datatsv); 
      else { 
       ready=true; 
      } 
     } 
    ); 
} 
4

Вы не сделаете этого, вы используете общую концепцию обратного вызова:

function dostuff(callWhenDone) { 
    // ... 
    d3.tsv(ajaxUrl, function callWhenTSVCompletes(data) { 
    // ... 
    d3.json(ajaxUrl, function callWhenJSONCompletes(header) { 
     //... 
     callWhenDone(); // now we're done. 
    }); 
    }); 
} 
+0

Немного похорошела/очиститель, если у вас есть время для этого: https: // github.com/mbostock/queue –

+0

этот метод должен замедляться, потому что мой php-запрос tsv длится 3 секунды, и мне нужно ответить очень быстро. – Alban

+0

не зная, что делают TSV и JSON, это ваша проблема. Если вам не нужно ждать TSV, тогда запустите его и забудьте об этом. Если вы это сделаете, 3 секунды - ваше собственное дело. @AdamPearce есть много каскадных префитеров, для двух вызовов только вы, вероятно, можете уйти, не используя очередь водопада или обратного вызова. –

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