Проверьте, какой элемент управления инициировал запрос AJAX - PullRequest
3 голосов
/ 27 февраля 2009

asp.net 2.0 / jQuery / AJAX

<script type="text/javascript">
//updated to show proper method signature

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(hideMessage);

function hideMessage(sender, args)
{
    var ctl = args.get_postBackElement();
    //check if ctl is the disired control
    //hide user notification message
}
</script>

У меня есть несколько элементов управления на странице, которые могут инициировать запрос AJAX, но я хочу, чтобы мои js запускались только при нажатии одной конкретной кнопки. Как проверить, какой элемент управления инициировал запрос, чтобы я мог запустить JS соответственно.

РЕДАКТИРОВАТЬ: Я работал над этим, но я все еще хотел бы знать, могу ли я сделать это таким образом.

Пояснение: Я не могу вызвать JS из события onclick, потому что страница находится внутри UpdatePanel, и я хочу, чтобы JS выполнялся только тогда, когда заканчивается запрос AJAX, и он был запущен одним конкретным кнопка на странице. На стороне сервера я устанавливаю myLabel.Text для некоторого текста, а затем js проверяет, является ли innerHTML $ (myLabel.CliendID) не пустым, и запускает js. проверка innerHTML - это мой обходной путь, поскольку я не могу понять, как проверить «отправителя» AJAX-запроса. Надеюсь, теперь это имеет больше смысла.

edit2: Я прочитал некоторую документацию , и оказалось, что вы МОЖЕТЕ проверить элемент управления "отправитель".

Спасибо.

Ответы [ 3 ]

7 голосов
/ 28 февраля 2009

Это то, что я делаю в своем коде, чтобы определить, какой элемент управления инициализировал запрос. Весь код JavaScript.

function pageLoad() {
    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequest);
    }
}
function endRequestHandler(sender, args) {
    if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>')        {
        //do something because of this...
    }
}
function initializeRequest(sender, args) {
    if (CheckForSessionTimeout()) {
        args.set_cancel(true);
    }
    else {
        if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') {
             //do something because of this
        }
    }
}

РЕДАКТИРОВАТЬ
Вот метод проверки времени ожидания на стороне клиента.

var sessionTimeoutDateTime = new Date();
    var sessionTimeoutInterval = <%= this.SesstionTimeoutMinutes %>;

    function CheckForSessionTimeout() {
        var currentDateTime = new Date()
        var iMiliSeconds = (currentDateTime - sessionTimeoutDateTime);
        if (iMiliSeconds >= sessionTimeoutInterval) {
            ShowSessionTimeout();
            return true;
        }
        return false;
    }
0 голосов
/ 28 февраля 2009

Я прочитал некоторую документацию , и оказалось, что вы МОЖЕТЕ проверить элемент управления "отправитель". JS в вопросе обновлен, чтобы показать правильную сигнатуру метода.

Эта статья дает еще лучшее объяснение.

0 голосов
/ 28 февраля 2009

Я бы порекомендовал, чтобы каждый элемент управления не выполнял одну и ту же функцию javascript. ИЛИ, если они это сделают, передайте параметр, который указывает, какой из них его выполнил.

Затем вы можете включить ваш ajax в функцию js, которую выполняет элемент управления.

И, если я не правильно понимаю проблему, возможно, вы могли бы объяснить ее более подробно или опубликовать некоторый код.

...