簡體   English   中英

函數完成后在JavaScript中設置變量

[英]Set variables in JavaScript once function finishes

我有兩個使Ajax調用的函數:getData和getMoreData。 getMoreData需要一個依賴於url變量getData的url變量。 這個問題繼續: 從<select>追加字符串以形成新變量

通過將從getData接收到的項添加到基本URL,我創建了一個用於getMoreData url的新變量(我們稱之為NewDimensionURL)。 但是,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()。

我猜你只是做getData(); getMoreData() getData(); getMoreData()背對背? 如果是這樣,那么您在運行getmoreData之前,getData從未從服務器返回響應。

您必須鏈接函數,以便只有在getData得到響應時才執行getMoreData。 例如

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

沒有看到您的代碼,很難說這是否是正確的解決方案,但是您應該嘗試鏈接函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM