функции обратного вызова javascript - несколько функций не выполняются - PullRequest
0 голосов
/ 14 января 2011

Я использую плагин jquery для отправки форм в мое приложение MVC.Проблема в моей функции обратного вызова «успех» обратного вызова.В этой функции я делаю 2 вызова к другим функциям JavaScript, которые у меня есть.Один обновляет часть страницы, а другой отправляет сообщение пользователю в другой части страницы.

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

Вот код.(здесь есть предупреждение, чтобы доказать, что оно не работает)

 function ShowProposedDate_Submit() {
    // prepare Options Object 
    var options = {
        dataType: 'json',
        success: function (responseText) {
            $("#blankModal").dialog("close");
            var ret = RefreshGrid(); //this function will execute but will not return
            alert(ret); //this statement won't execute
            PostMessage(responseText.msg); //this function won't execute



        },
        error: function (responseText) {
            $("#feedback").html(responseText.msg);
        }
    };

    // pass options to ajaxForm 
    $('#showProposedDate').ajaxForm(options);
}

Вот дополнительные функции.

 function PostMessage(message) {
    $('.message_wrap').remove();
    $("<div></div>)").addClass("message_wrap")
                 .text(message)
                 .prependTo(".grid_20");
    KillMessage();
}

function RefreshGrid() {
    $.get("/workitems/list", function (data) {
        $("#grid").replaceWith(data);
        getAvailableActions(0);
        getMoreDetails(0);
        ResetCheckbox();
        return 0;
    });
}

Каждая из этих функций прекрасно работает, если я размещу ее сначала в порядке.Есть идеи, почему я не могу запустить их обоих?

Ответы [ 2 ]

0 голосов
/ 14 января 2011

Я бы предположил, что где-то произошла ошибка .. Попробуйте это определить.

 function ShowProposedDate_Submit() {
    // prepare Options Object 
    var options = {
        dataType: 'json',
        success: function (responseText) {
            $("#blankModal").dialog("close");
            try { RefreshGrid(); } catch ( err ) { alert("Error: " + err); }
            try { PostMessage(responseText.msg); } catch ( err ) { alert("Error2: " + err); }



        },
        error: function (responseText) {
            $("#feedback").html(responseText.msg);
        }
    };

    // pass options to ajaxForm 
    $('#showProposedDate').ajaxForm(options);
}
0 голосов
/ 14 января 2011

RefreshGrid не собирается ничего возвращать.Функция $ .get () является асинхронной, поэтому она регистрирует обратный вызов, и RefreshGrid возвращается из функции до завершения .get.Функция get возвращает 0 позже, но она не будет сохранена в вашей переменной.

...