AJAX-запрос с несколькими ответами - PullRequest
29 голосов
/ 25 июня 2011

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

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

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

Ответы [ 5 ]

22 голосов
/ 25 июня 2011

Вы можете реализовать это, используя 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');
}
5 голосов
/ 25 июня 2011

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

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

1 голос
/ 20 июля 2011

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

1 голос
/ 25 июня 2011

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

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

0 голосов
/ 22 марта 2013

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

То, что вы действительно можете сделать, это.

проверить данные ответа а также выполнить ДРУГОЕ действие согласно выбранным данным.

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