使用jqueryajax的JavaScript作用域
在这种情况下,我希望有一个全局变量,比如a,我将从某个服务器的jQueryAjax中获取它的值,然后希望该值可以从其他函数调用时使用。要可视化:使用jqueryajax的JavaScript作用域,javascript,jquery,html,Javascript,Jquery,Html,在这种情况下,我希望有一个全局变量,比如a,我将从某个服务器的jQueryAjax中获取它的值,然后希望该值可以从其他函数调用时使用。要可视化: var a = []; $(document).ready(function () { $.ajax({ type: 'GET', url: 'some url', success: function (response) { a = response.somearray; }, error:
var a = [];
$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'some url',
success: function (response) {
a = response.somearray;
},
error: function () {
alert("Not successfull");
}
});
});
function something() { // this function will be called onclick of a button in html
console.log(a); // here I want the value that came from the server. But currently, it's printing empty array
}
我试过的方法如下:
需要注意的是,在完成页面加载和ajax调用之后,从HTML按钮调用something()函数。所以值已经可用。范围丢失,因为ajax回调是异步函数。我想应该是
var a = [];
$(document).ready(function () {
var me = this;
$.ajax({
type: 'GET',
url: 'some url',
success: function (response) {
me.a = response.somearray;
},
error: function () {
alert("Not successfull");
});
});
下面是您想要的工作示例,请检查控制台日志:
编辑: HTML: 你好
看起来不错,在大多数情况下,您遇到了什么问题?我遇到的问题是它打印的是空数组。只要用户在响应返回后单击按钮(这很可能是因为服务器延迟),它就不应该是空的。这是你正在使用的实际代码吗?顺便问一下,你有一个括号不匹配,你检查过js错误吗?这是一个演示代码@antoni,所以括号不匹配不是我感兴趣的东西。服务器的响应已经填充了somearray,因此我对功能而不是语法感兴趣。OP的代码没有
这个问题。他的something()
只被称为onclick。他不希望自动调用它。(即使是这样,这个实现基本上与OP的当前代码没有什么不同-它不会解决他遇到的任何问题)OP在ajax调用后说调用为什么不发布自己的答案而不是批评其他响应,如果在ajax调用后没有,您的响应也不会解决它,当点击按钮时-请参见,点击html中的按钮时,此函数将被调用,因为OP的问题无法重现,因为他发布了代码-他没有发布真正的代码,因此无法确定到底出了什么问题
var a = [];
$(document).ready(function () {
$.getJSON("https://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?", {
tags: "snowboarding",
tagmode: "any",
format: "json"
})
.done(function (response) {
a = response.items;
// something(); Don't need this.
});
});
function something() { // this function will be called onclick of a button in html
console.log(a); // here I want the value that came from the server. But currently, it's printing empty array
}
<button onclick="something()">hello</button>