0

私の延期についていくらかの助けが必要で、.thenと.doneを使おうとしました。しかし、それは機能しません。servercallが完了する前に、console.logが書き込まれます。

$.when(PersonAtlLawUpdate(personRef)).then(console.log('test'));

function PersonAtlLawUpdate(personRef, cbFunc) {
    var selectionPanel = $('div#SelectionPanel'),
        fromdate = selectionPanel.find('input#FromDateTextBox')[0].defaultValue,
        timeSpan = selectionPanel.find('select#TimeSpanDropdownList').data('timespanvalue'),
        url = "MonthOverview.aspx/OnePersonAtlLawUpdate";
    $.ajax({
        url: url,
        data: JSON.stringify({ personRef: personRef, fromdate: fromdate, timespan: timeSpan }),
        type: "POST",
        contentType: "application/json",
        dataType: "JSON",
        context: document.body,
        success: function (atlError) {
            changePersonAtlStatusIcon(atlError, personRef);
            if (cbFunc != null) {
                cbFunc();
            }
            return atlError;
        },
        error: function (xhr, status, errorThrown) {
            //alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
        }
    });
}
4

1 に答える 1

1

PersonAtlLawUpdate()で使用するには、Deferredオブジェクトを返す必要があります$.when()

興味のある延期はによって返される$.ajax()ので、次のように書く必要があります。

function PersonAtlLawUpdate(personRef, cbFunc) {
    // [...]
    return $.ajax({
        // ...
    });
};
于 2013-02-11T11:12:59.900 に答える