Доступ к переменным javascript, установленным в функции обратного вызова вызова PageMethod - PullRequest
1 голос
/ 19 апреля 2011

В событии щелчка я вызываю запрос PageMethods, который содержит две функции обратного вызова: OnServerValidationSuccess и OnServerValidationFailure.Я также пытаюсь настроить создание объекта с именем clientResult;

    var clientResult = { rc: "", msg: "" };

    $('#btnSave').click( function () {
        PageMethods.ServerValidateCreateCompany(companyName, domainName, country, OnServerValidationSuccess, OnServerValidationFailure);
        alert(clientResult.rc); //this is null!
});

. В OnServerValidationSuccess параметр результата содержит асинхронный ответ.И там я пытаюсь присвоить его clientResult.

//On Success callback
function OnServerValidationSuccess(result, userContext, methodName) {
    clientResult = result;
    if (clientResult.msg.length != 0) {
        document.getElementById('resMsg').innerHTML = clientResult.msg;
        $('#resMsg').addClass('warning');
    }
}

Я присваиваю result локальной переменной clientResult в функции обратного вызова.Он должен содержать полностью сформированный ответ сервера, который правильно отправляется серверным WebMethod.Тем не менее, он остается нулевым или пустым после вызова PageMethod.Что я должен сделать, чтобы назначить набор переменных в обратном вызове локальной переменной, чтобы я мог получить к ней доступ?

1 Ответ

0 голосов
/ 19 апреля 2011

Вы, кажется, правильно присваиваете значение clientResult, просто слишком рано обращаетесь к нему.

Вы делаете асинхронный / неблокирующий вызов, что означает, что оно немедленно возвращается, но продолжаетсяработать в фоновом режиме.Таким образом, ваш JavaScript немедленно возвращается из вызова на PageMethods.ServerValidateCreateCompany и переходит на alert.Но ваш запрос не успел завершиться, и ваш обратный вызов (OnServerValidationSuccess) еще даже не запустился, поэтому вы получаете undefined или null.

. Вы должны вызывать любую функциюобработайте ответ в функции OnServerValidationSuccess, в которой будет получен ответ.Возможно, что-то вроде этого (вы, кажется, уже что-то делаете с msg, просто перенесите свою работу с rc и здесь)

//On Success callback
function OnServerValidationSuccess(result, userContext, methodName) {
    clientResult = result;
    alert(clientResult.rc); //this will work
    process(clientResult); //process the response here
    if (clientResult.msg.length != 0) {
        document.getElementById('resMsg').innerHTML = clientResult.msg;
        $('#resMsg').addClass('warning');
    }
}
...