函数完成后,在JavaScript中设置变量

时间:2014-01-08 20:41:16

标签: javascript jquery ajax

我有两个函数可以调用Ajax:getData和getMoreData。 getMoreData需要一个依赖于url变量getData的url变量。这些问题将继续:String append from <select> to form new variable

通过将从getData接收到的项目附加到基本URL上,我创建了一个新变量(让我们调用此NewDimensionURL),我将其用于getMoreData url。但是,NewDimensionURL将显示错误,因为原始列表(来自getData)尚未填充,并且不会在基本URL上附加任何内容。

我的想法是在getData完成填充组合框后设置NewDimensionalURL,以便getMoreData可以在之后运行。


的JavaScript

var GetDimensions = 'SomeURL1';

//--Combines URL of GetDimensionValues with #dimensionName (the select ID)
var UrlBase = "Required URL of getMoreData";
var getElement = document.getElementById("dimensionName");
var GetDimensionValues = UrlBase + getElement.options[getElement.selectedIndex].text;


function handleResults(responseObj) {
        $("#dimensionName").html(responseObj.DimensionListItem.map(function(item) {
                return $('<option>').text(item.dimensionDisplayName)[0];
    }));
}

function handleMoreResults (responseObj) {
    $("#dimensionId").html(responseObj.DimensionValueListItem.map(function(item) {
        return $('<option>').text(item.dimensionValueDisplayName)[0];
    }));
}

function getData() {
    debugger;
    jQuery.ajax({
        url: GetDimensions,
        type: "GET",
        dataType: "json",
        async: false,
        success: function (data) {
                    object = data;
        handleResults(data);
    }
});
}

function getMoreData() {
    debugger;
jQuery.ajax({
    url: GetDimensionValues,
    type: "GET",
    dataType: "json",
    async: false,
    success: function (data) {
        object = data;
        handleMoreResults (data);
    }
});
}

回答

重新排序为:

var GetDimensionValues;


function handleResults(responseObj) {
    $("#dimensionName").html(responseObj.DimensionListItem.map(function(item) {
        return $('<option>').text(item.dimensionDisplayName)[0];
    }));
    GetDimensionValues = UrlBase + getElement.options[getElement.selectedIndex].text;
}

创建onchange函数Repopulate(),用于解析getMoreData()和填充handleMoreResults()。

2 个答案:

答案 0 :(得分:0)

我猜你只是背靠背做getData(); getMoreData()?如果是这样,那么在getData从服务器获得响应之前,你正在运行getmoreData。

您必须链接这些函数,以便getMoreData仅在getData获得响应时执行。 e.g。

$.ajax($url, {
   success: function(data) {
        getMoreData(); // call this when the original ajax call gets a response.
   }
});

答案 1 :(得分:0)

如果没有看到您的代码,很难说这是否是正确的解决方案,但您应该尝试将这些功能链接起来:

$.ajax({url: yourUrl}).then(function (data) {
  // deal with the response, do another ajax call here
}).then(function () {
  // or do something here
});