Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使HTML按钮的显示属性依赖于jQuery Get()的完成_Javascript_Html_Jquery_Css - Fatal编程技术网

Javascript 使HTML按钮的显示属性依赖于jQuery Get()的完成

Javascript 使HTML按钮的显示属性依赖于jQuery Get()的完成,javascript,html,jquery,css,Javascript,Html,Jquery,Css,你好 在编写一个扩展代码时,我遇到了一个有趣的问题,我已经处理了一段时间——根据jQuery get()函数中的“if语句”显示/隐藏一个特定的按钮。由于该函数的加载时间比按钮和其他元素长,因此在调用jQuery get()结果定义的变量以确定按钮显示(block或none)时,它返回undefined。我想到的几种解决方案是可能的setTimeout()在x秒后获取值,但这种方法不可行,因为显示应该依赖于get语句的完成(成功或失败),类似于html主体的onload 有什么想法吗?如果我的建

你好

在编写一个扩展代码时,我遇到了一个有趣的问题,我已经处理了一段时间——根据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当然