Кросс-браузер - Ajax или JQuery «повторяющийся» вызов Asp.Net MVC Controller Action - PullRequest
1 голос
/ 28 ноября 2010

Мне нужно каждые двадцать секунд звонить в действие контроллера ASP.Net (просто чтобы сказать, что я жив).Действие ничего не возвращает.

Код действия:

public ActionResult StillOnline()
{
    // bla bla bla
    return new EmptyResult();
}

Я понимаю, что лучший способ сделать "повторяющийся" вызов - это использовать SetInterval (функция, XXX), но кажется, что мойпробные версии работают с одним браузером, а не с другими.

Мой текущий вызов JQuery:

        <script type="text/javascript" src="<%= Url.Content("~/scripts/jquery-1.4.1.min.js") %>"></script>

        <script type="text/javascript">
            window.setInterval(
                $.get('<%: Url.Action("StillOnline", "Account") %>'), 10000);
        </script>

Это, например, хорошо работает с Chrome (выполняется каждые 5 секунд), но не с IE (этовызывается только один раз) и никогда не выдает ошибку.

ВОПРОС:

Каков лучший кросс-браузерный способ вызова действия контроллера на сервере, который ничего не возвращает ??

Ответы [ 3 ]

1 голос
/ 28 ноября 2010

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

<script type="text/javascript">
    window.setInterval(function() { 
        var url = '<%: Url.Action("Available", "ControllerName") %>';
        $.get(url);
    }, 10000);
</script>

Также обратите внимание на круглые скобки () после объявления анонимной функции, которое вы пропустили в первоначальном объявлении (то, которое было передано setInterval, а не то, которое document.ready).

Также неплохо, чтобы действие вашего контроллера всегда возвращало что-то, а не null (даже если это что-то - пустой результат):

public ActionResult Available()
{
    return new EmptyResult();
}
0 голосов
/ 28 ноября 2010
<script type="text/javascript">

function DoCallBack() {
        var url = '<%: Url.Action("Available", "ControllerName") %>';
        $.getJSON(url, null, null);
}

window.setInterval("DoCallBack()", 10000);

</script>


public ActionResult Available()
{
    return "[]";
}
0 голосов
/ 28 ноября 2010

Попробуйте

return JSON(true);

в вашем действии.Ваш javascript не может проанализировать ответ JSON, который он ожидает, когда вы возвращаете ноль.

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