如何在onclick事件上一个接一个地调用两个javascript函数

时间:2017-10-25 11:41:19

标签: javascript jquery ajax html5

我有一个超链接图片,点击图片应调用名为$plan = new Plan(); $plan->setName('Billing Plan') ->setDescription('Billing Plan') ->setType('fixed'); 的javascript函数,如下所示,

downloadReport()

此函数再次包含两个函数。

<a href="#" title="Export" target="self"><img onclick="downloadReport()" align="right" id="exportFile" src='<c:url value="resources/img/excel_download.jpg"/>'></a>

这个代码的问题是,第二个函数download()在上传之前被调用,如何等待完成上传功能然后调用下载功能?因为我是javascript的初学者,也没有关于Ajax或JQuery的大量信息。

3 个答案:

答案 0 :(得分:0)

你可以通过ajax post ajax调用第一个方法upload(),然后在ajax成功响应的基础上,你可以调用第二个方法。

答案 1 :(得分:0)

看起来应该是这样的:

function downloadReport() {
    upload().then(function() {
         download().then(function() {
             // do other stuff when all finished
         });
    });
}

function upload(){
    return $.Deferred(function(def) {
        from = getFrom();
        to = getTo();
        all = getAll();
        approved = getApproved();
        rejected = getRejected();
        pending = getPending();

        _("multiphase").method = "get";
        _("multiphase").action = "/curation/export";
        // _("multiphase").submit(); should have some sort of callback if it's async. Maybe it already returns a promise?!
        _("multiphase").submit(function(){ def.resolve(); });
        // the function(){ def.resolve(); } should represent the submit callback 
    });
}

function download() {
    return $.Deferred(function(def) {
        _("multiphase").method = "get";
        _("multiphase").action = "/curation/download";
        _("multiphase").submit(function() { def.resolve(); });
    });
}

答案 2 :(得分:0)

如果第一个函数执行成功,那么你应该从第一个函数返回值并添加条件,然后另一个函数将起作用。类似下面的例子

@PreDestroy
    public void clear() {

    }