запросы jQuery $ .post - PullRequest
       12

запросы jQuery $ .post

0 голосов
/ 03 декабря 2010

У меня есть действие, которое возвращает данные для диаграмм на странице.Он принимает параметр chartType и возвращает данные графиков.Страница использует jQuery и функцию $.post для вызова.Вот пример:

var fillChart = function (chartData){ /* fill routine here */};

$(function () {
    $.post(
       '/Charts/ChartsJson',
       'chartType=Type1', 
       fillChart, 
       'json'); 

    $.post(
       '/Charts/ChartsJson',
       'chartType=Type2', 
       fillChart, 
       'json');

    // other calls here [*]
});

У меня есть массив chartTypes, который должен быть обработан.Если я добавлю все звонки после прокомментированной строки, то все они будут отправлены одновременно.Это нормально, если есть от 1 до 3 предметов.Но если есть больше предметов, то это плохо сказывается на производительности.Есть ли способ ограничить количество одновременно выполняемых почтовых запросов?Я знаю, что я мог бы использовать обратный вызов первого сообщения, который вызовет второе, и так далее ... Мой вопрос: «Есть ли другой способ?»

UPD: Каждыйзвонок уже разделен.(И количество элементов в моем массиве не всегда известно.) Это действие возвращает около 1000 сложных элементов за вызов, и разные chartType говорят, какую таблицу использовать (и какую логику для извлечения данных)Полное извлечение всех данных может занять 20, даже 40 секунд.Поэтому я хочу показать его на ходу, так как он был обработан.

Ответы [ 3 ]

4 голосов
/ 03 декабря 2010

Я успешно справился с настройкой специальной очереди сообщений. Сообщения могут быть объектами json с параметрами для сообщений в качестве данных. У вас может быть любое количество работников, вытаскивающих объекты из очереди.

Например:

var ajax_message_queue = [];

ajax_message_queue.push({
  "ajaxtype" : "post",
  "action"   : '/Charts/ChartsJson',
  "data"     : handlers.fillChart,
  "datatype" : "json"
});

Работник будет просто функцией на основе setTimeout, которая выскакивает самое старое сообщение и выполняет его. Затем работник может быть заблокирован от получения следующего сообщения до тех пор, пока первое не будет завершено. Если вы хотите, чтобы работника даже заставили повторить запрос в случае его сбоя.

1 голос
/ 03 декабря 2010

Это делается автоматически браузером - веб-браузер не будет отправлять более одного количества HTTP-запросов на один сервер за один раз. Они будут автоматически поставлены в очередь и выполнены после завершения.

Я бы предложил переписать ваш серверный код, чтобы разрешить отправку нескольких элементов за один раз, если вы хотите повысить производительность.

0 голосов
/ 03 декабря 2010

Возможно, вам следует отправить все данные одновременно.Перестройте ваш входной массив, чтобы получить ключ chartType.Таким образом, в бэкэнде вы можете обработать его соответственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...