Javascript 在jQuery中从onload承诺传递变量

Javascript 在jQuery中从onload承诺传递变量,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图将参数从onload GET方法调用传递到POST方法。GET方法正在window.onload上加载,而POST函数不在onload调用中,否则一旦加载了窗口,POST函数就会触发。我只想在单击按钮时触发POST功能 如何将onload AJAX调用中的变量传递给POST函数 我能想到的唯一方法是使用全局变量,但我不认为这是将其传递给另一个函数的好方法 window.onload = function () { function firstCallBack() {

我试图将参数从onload GET方法调用传递到POST方法。GET方法正在window.onload上加载,而POST函数不在onload调用中,否则一旦加载了窗口,POST函数就会触发。我只想在单击按钮时触发POST功能

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

我能想到的唯一方法是使用全局变量,但我不认为这是将其传递给另一个函数的好方法

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

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>

您基本上是在问如何将变量保持在全局范围之外。这就是所谓的封装。这是一个很好的本能,但却是一个很大的话题。以下是我喜欢的关于这个主题的帖子:

一种低预算的方法是,与其为您的值创建一个全局变量,不如创建一个供您自己使用的全局名称空间

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

您的按钮:

<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);
在存储设置功能上:

function saveSetting() {
    var allData = {
        'ObjectName': $(this).data("passMe"),
        'DisplayDefinition': setting,
    }
    //... your post request 
}
您还可以在启动post请求之前检查get请求是否已完成,以避免在极端情况下出现错误:

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

您应该将它们保存在某个地方,因为第二个函数是on-click事件。您的两个调用都不是同步的,这是一个很好的选择thing@RoryMcCrossan我的意思是承诺,我应该改写标题“哈哈”。也许在DOM中,将从GET函数接收到的值添加为属性。然后,当您点击并触发POST函数时,您可以从DOM的属性本身获取值。对于投票否决该问题的人,您需要指定投票否决该问题的原因。objectName中的数据看起来不像是通过的,您在哪里使用if条件?@nCore the if应该位于您的函数中,为了取消它。嗯,我不知道发生了什么,但它应该能工作。是的,它现在工作得很好,只是我的get请求需要时间才能完成。我使用的是angular2,浏览器同步会检查每个文件是否有更改,因此如果我重新加载页面,它会重新运行脚本,这很糟糕。