Javascript 使HTML按钮的显示属性依赖于jQuery Get()的完成
你好 在编写一个扩展代码时,我遇到了一个有趣的问题,我已经处理了一段时间——根据jQuery get()函数中的“if语句”显示/隐藏一个特定的按钮。由于该函数的加载时间比按钮和其他元素长,因此在调用jQuery get()结果定义的变量以确定按钮显示(block或none)时,它返回undefined。我想到的几种解决方案是可能的setTimeout()在x秒后获取值,但这种方法不可行,因为显示应该依赖于get语句的完成(成功或失败),类似于html主体的onloadJavascript 使HTML按钮的显示属性依赖于jQuery Get()的完成,javascript,html,jquery,css,Javascript,Html,Jquery,Css,你好 在编写一个扩展代码时,我遇到了一个有趣的问题,我已经处理了一段时间——根据jQuery get()函数中的“if语句”显示/隐藏一个特定的按钮。由于该函数的加载时间比按钮和其他元素长,因此在调用jQuery get()结果定义的变量以确定按钮显示(block或none)时,它返回undefined。我想到的几种解决方案是可能的setTimeout()在x秒后获取值,但这种方法不可行,因为显示应该依赖于get语句的完成(成功或失败),类似于html主体的onload 有什么想法吗?如果我的建
有什么想法吗?如果我的建议无效,请在此处共享您的代码。请参阅下面的代码,希望它能让您了解如何处理您的场景。返回get调用后,将调用success和error alert
var jqxhr = $.get( "example.php", function() {
alert( "success" );
})
.fail(function() {
alert( "error" );
})
创建一个承诺,该承诺将有一个回调,该回调将在请求完成后调用您的函数。有关承诺的更多信息,请参阅
function get(url) {
// Return a new promise.
return new Promise(function(resolve, reject) {
// Do the usual XHR stuff.
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function() {
// This is called even on 404 etc so check the status.
if (req.status == 200) {
// Resolve the promise with the response text.
resolve(JSON.parse(req.response));
}
else {
// Otherwise reject with the status text which will hopefully be a meaningful error.
reject(Error(req.statusText));
}
};
// Handle network errors
req.onerror = function() {
reject(Error("Network Error"));
};
// Make the request.
req.send();
});
let promiseUrl = 'yoururlhere';
get(promiseUrl).then(function(response){
displayButton(response);
}, function(error) {
console.error("Failed!", error);
})
如果有人有同样的问题,我刚刚发现了一个使用async和Wait的简单解决方案 a>b时的按钮显示块(a为10,b为9)
var a=10;
var b=9;
如果(a>b){
异步函数myDisplay(){
让我承诺=新承诺(函数(myResolve,myReject){
myResolve(“块”);
});
document.getElementById(“demo”).style.display=wait myPromise;
}
myDisplay();
}否则{
myResolve(“无”);
}
#演示{
显示:无;
}
Hi
您的示例演示了如何从get()的同一函数内部调用响应。然而,当我从一个url中检索它,然后处理数据,然后在get之外的另一个函数中根据这个函数确定按钮的显示时,我看不出这种方法是如何工作的。此外,由于该方法需要在用户每次单击特定选项卡时都有效,因此您的答案将适用于页面加载,但由于addEventListener更改了按钮显示,因此结束。我可以看到我在问题中漏掉了重要信息,我的坏!我想我需要的基础是确定get()何时结束,然后运行保持definite的函数来显示按钮谢谢你的帮助。您的解决方案是完成给定任务的明确可行的替代方案,即使我能够找到一个更简单的方法。我从你的回答中学到了很多+1当然