Javascript 在jQuery中从onload承诺传递变量
我试图将参数从onload GET方法调用传递到POST方法。GET方法正在window.onload上加载,而POST函数不在onload调用中,否则一旦加载了窗口,POST函数就会触发。我只想在单击按钮时触发POST功能 如何将onload AJAX调用中的变量传递给POST函数 我能想到的唯一方法是使用全局变量,但我不认为这是将其传递给另一个函数的好方法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() {
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,浏览器同步会检查每个文件是否有更改,因此如果我重新加载页面,它会重新运行脚本,这很糟糕。