как настроить клиентский опрос AJAX - PullRequest
0 голосов
/ 30 декабря 2011

Я бился головой об этом, пока он не стал мягким.Время проконсультироваться с экспертами!

Мое приложение порождает ряд Delayed :: Jobs.Я хотел бы предоставить пользователю визуальную обратную связь о состоянии этих заданий во время их выполнения.Итак, предположим, у меня есть модель Job

Также предположим, что шаблон представления с элементом <div id='job-status'></div> является местом для отображения статуса заданий.О, также предположим, что я использую Rails3 с jQuery.

Для максимальной переносимости, я хотел бы использовать инициированный javascript опрос на стороне клиента.Я немного знаю javascript (методы jQuery, setTimeout и т. Д.), Но я не нашел смеси функций Rails и jQuery, которые бы делали это разумным образом.

Кратко, если у вас было задание ActiveRecordмодель с именем, состоянием и состоянием, что бы вы поместили в ваши controllers / jobs_controller.rb и какие представления / jobs / будут реализованы?И генерирует ли сервер html, JSON или XML для обновления div # job-status?(Я понимаю, что это широкий набор вопросов - я не ожидаю полного ответа, достаточно указателей, чтобы собрать его вместе.)

Спасибо.

1 Ответ

2 голосов
/ 30 декабря 2011

Вы должны выполнить ajax-вызов с помощью jquery для метода с поддержкой json на вашем контроллере, который отправляет обратно данные.

Используя эти данные, вы можете обновить содержимое элемента div с помощью эффекта, такого как $("#somediv").html(ajax_result)

Вот реальный пример:

var linkHtml = $("#searchNumber").html();
$("#message").empty();
var aurl = "/Prospect/SearchNumberAuth?number=" + $("#MSISDN").val() ;
$.ajax({
    dataType: 'json',
    type: "GET",
    url: aurl,
    async: false,
    contentType: "application/json; charset=utf-8",
    beforeSend: function() {
        $("#holdNumber").fadeOut("slow");
        $("#searchNumber").empty().html("<image src='../../Content/images/jquery-ui/load-indicator.gif'/>");
    },
    success: function(response) {
        $("#message").fadeIn(1500).html(function() {
            if (response[0] == "Exist") {
                $("#holdNumber").fadeIn("slow");
                $("#MSISDN").attr("readonly", "readonly");
                $("#searchNumber").fadeOut("slow");
                return existMsg;
            } else if (response[0] == "Sold") {
                $("#searchNumber").empty().html(linkHtml).fadeIn("slow");
                return soldMsg;
            } else if (response[0] == "Hold") {
                $("#searchNumber").empty().html(linkHtml).fadeIn("slow");
                return holdMsg;
            } else
                $("#searchNumber").empty().html(linkHtml).fadeIn("slow");
            return notExistsMsg;
        });
    },
    error: function(jqXHR, textStatus, errorThrown) {
        $("#searchNumber").empty().html(linkHtml).fadeIn("slow");
    },
    complete: function() {
    }
});

А вот код на стороне сервера в классе контроллера, который можно легко перенести на Rails:

    public JsonResult SearchNumberAuth(long number)
    {
        return this._searchNumber(number);
    }

, который в _searchNumebr метод я верну JsonResult.

Более подробную информацию можно найти на веб-сайте , хотя он написан на персидском языке, но вы можете увидеть код js с помощью FireBug в ProspectView.js и результат на второй вкладке.

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