Подтвердить что ты не робот

Запрос AJAX с несколькими ответами

Есть ли способ иметь один запрос AJAX с несколькими ответами?

Например, если сделать запрос GET на сервер, который займет много времени, чтобы вычислить, как я могу заставить сервер иногда отправлять ответы, которые дают мне некоторые данные о ходе?

Если да, может кто-нибудь опубликовать пример, желательно с Jquery и объяснение механизма, через который сервер может это сделать?

4b9b3361

Ответ 1

Вы можете реализовать это, используя 2 вызова ajax, один для запуска процесса и второй вызов для периодического опроса прогресса:

На стороне сервера:

public class ProgressInfo
{
    public int Percent {get;set;}
    public bool Done {get;set;}
}

public JsonResult DoCalculation(string id)
{
    ProgressInfo progress = new ProgressInfo();
    if(!string.IsNullOrEmpty(id))
    {
        Session[id] = progress;
    }

    //periodicly update progress
    progress.Percent++;
}

public JsonResult GetProgress(string id)
{
    ProgressInfo progress;
    if(string.IsNullOrEmpty(id)
        || (progress = Session[id] as ProgressInfo) == null)
    {
        return Json(new {
            success = false
        });
    }
    if(progress.done)
    {
        Session.Remove(id);
    }
    return Json(new {
        success = true,
        done = progress.done,
        percent = progress.Percent
    });
}

На стороне клиента:

var progressID = Math.random();

function doCalculation() {
    $.post('<%=Url.Action("DoCalcluation")%>/' + progressID);
    setTimeout(pollProgress, 1000);
}

function pollProgress() {
    $.post('<%=Url.Action("GetProgress")%>/' + progressID, function(response){
        if(!response.success) {
            alert('Cannot find progress');
            return;
        }
            if(response.done) {
                alert('Done!');
            } else {
            alert('Progress at ' + response.precent + '%');
            setTimeout(pollProgress, 1000 /*1 second*/);
            }
    }, 'json');
}

Ответ 2

Быстрый ответ: Нет, это невозможно.

Вы должны отправить больше запросов, чтобы получить больше ответов

Ответ 3

Вам, скорее всего, понадобится помощь в кодировании на стороне сервера, потому что похоже, что вам нужен обратный ajax или то, что также называется push кометы. Я не знаю, какой язык вы используете на стороне сервера, но основная идея заключается в том, чтобы отложить ответ HTTP до тех пор, пока браузер позволит использовать бесконечный цикл (на стороне сервера) и нажимать данные, пока соединение живое

Вы можете проверить это: http://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ

Ответ 4

Посмотрите на xajax, он может отправить несколько ответов назад, и каждый может перенаправить их в определенные области. В этом отношении xajax намного лучше, чем jQuery. Я могу сделать один запрос, и сервер может составить ответ, который содержит несколько ответов либо HTML, JavaScript, и т.д. Вы даже можете сказать, что это есть и что там есть такие опции, как append, replace и т.д. Очень круто. jQuery должен сделать это, тогда я могу переключаться раз и навсегда на jQuery... Это единственное, что мешает мне переключиться.

Ответ 5

Один запрос Ajax ----------- > Вы получаете один ответ.

На самом деле вы можете сделать это.

проверить данные ответа а также делать РАЗЛИЧНЫЕ действия в соответствии с полученными данными.