从jQuery中的onload promise传递变量

时间:2016-09-29 14:51:43

标签: javascript jquery ajax

我试图将onload GET方法调用中的参数传递给POST方法。 GET方法正在加载window.onloadPOST函数不在onload调用中,否则POST函数将在窗口加载后触发。我只想在单击按钮时触发POST功能。

如何将变量从onload AJAX调用传递给我的POST函数?

我能想到的唯一方法就是使用global变量,但我并不认为这是将其传递给其他函数的好方法。

window.onload = function () {
    function firstCallBack() {
        $.get('http://website.com/API/docs/v1').then(function(data1){
            var passThis = "PassMeToPOST"               
        }).then(function (data2) {              
        })
    }
}

POST功能

function saveSettings(passThatVar) {
    var urlVal = window.__env.url+ "Preview/TypeDefinition";
    var xslSettingVal = $('#PreviewXml').val().replace(/\n/g, "");
    var allData = {
        'ObjectName': passThatVar,
        'DisplayDefinition': setting,
    }

    $.ajax({
        url: urlVal,
        type: "POST",
        data: JSON.stringify(allData),
        success: function (data) {
            console.log('success');
        }
    });
}

按钮HTML:

<button onclick="saveSetting()"> Save Setting </button>

2 个答案:

答案 0 :(得分:2)

试试这个:

您的按钮:

<button id="save-settings"> Save Setting </button>

收到请求后,请将数据属性设置为按钮:

function firstCallBack() {
    $.get('http://website.com/API/docs/v1').then(function(data1){
        $("#save-settings").data("passMe", "PassMeToPOST");
    }).then(function (data2) {              
    })
}

绑定点击事件(这是使用内联事件的最佳做法):

$("#save-settings").on("click", saveSetting);

saveSetting()功能上:

function saveSetting() {
    var allData = {
        'ObjectName': $(this).data("passMe"),
        'DisplayDefinition': setting,
    }
    //... your post request 
}

您还可以在启动发布请求之前检查get请求是否已完成(以避免在极端情况下出现错误):

if (!$(this).data("passMe")) {
    return;
}

答案 1 :(得分:-2)

您基本上都在询问如何将变量保留在全局范围之外。这称为封装。这是一种很好的直觉,但却是一个很大的话题。以下是我喜欢的帖子:http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/

这样做的一种低预算方法是为您的值创建一个全局变量,而不是为自己使用全局命名空间。

var MyUniquelyNamedThing = {};
...
// get response:
MyUniquelyNamedThing.ThatValueINeed = data;
...
// posting:
data = { val1: MyUniquelyNamedThing.ThatValueINeed , etc. };