设置要执行的函数的顺序

时间:2014-01-23 22:41:48

标签: javascript jquery

我有两个Jquery函数。如何设置执行顺序,以便只在函数A之后调用函数B,(后面的原因是函数A将值设置为变量IdstoExclude,它作为参数传递给函数B. 以下是我试过的但没有运气:

var IDstoExclude = "123";
callListService('getArticleTypelistById', 'Atid', 87, 5, '#MainStory', '#tmplFeaturePanel', IDstoExclude);
callListService('getArticleTypelistById', 'Atid', 87, 10, '#LeftSideContent1', '#tmplLeftSideContent1', IDstoExclude);


function callListService(webServiceName, parameterName, parameterValue, noOfItems, domElement, templName, exclIDs) {
    //set a default value for the template name * exclIDs
    templName = templName || "#FeaturedSubStories";
    //exclIDs = exclIDs || "123,12";
    var inputParameters = webServiceName.toLowerCase() + ':' + parameterName.toLowerCase() + ':' + parameterValue + ':noofitems:' + noOfItems + ':excludeids:' + exclIDs;
    var clientcode = getCryptoToken(inputParameters);
    //Build JSONp query
    eval("data={" + parameterName.toLowerCase() + ":" + parameterValue + ", noofitems: " + noOfItems + ", excludeids:" + exclIDs + ",  clientcode:'" + clientcode + "' }");

    $.getJSON('https://abc.com/Service.svc/' + webServiceName + '?callback=?', data, function (data2) {
        var template = $.templates(templName);
        var htmlOutput = template.render(data2);
        $(domElement).append(htmlOutput);
        IDstoExclude = data2.IdsInThisList;

    });

尝试以下但没有运气:var IDstoExclude =“123”;

function callService1() {
    return $.ajax()
        .then(function(response) {
            callListService('getArticleTypelistById', 'Atid', 87, 10, '#LeftSideContent1', '#tmplLeftSideContent1', IDstoExclude);
        });
}

function callService2() {
    callListService('getArticleTypelistById', 'Atid', 87, 10, '#LeftSideContent1', '#tmplLeftSideContent1', IDstoExclude)
}

$.when(callService1()).then(callService2);

1 个答案:

答案 0 :(得分:0)

要使此解决方案按预期工作,您的代码应如下所示:

function callService1(p1, p2, ...) {
    return $.ajax(...)
        .then(function(response) {
            return something;
        });
}

function callService2(something_from_s1) {
    // work with something_from_s1 var
}

$.when(callService1(...)).then(callService2);

参考文献: