Jquery 从AJAX存储变量
如何访问来自函数返回的ajax请求的变量?我可以控制台输出变量,但似乎无法将其存储在范围之外 它看起来是什么样子:Jquery 从AJAX存储变量,jquery,ajax,Jquery,Ajax,如何访问来自函数返回的ajax请求的变量?我可以控制台输出变量,但似乎无法将其存储在范围之外 它看起来是什么样子: 在html中: 函数my_ajax(){ }/*结束我的_ajax()*/ …然后在js文件中: my_ajax().then(function(response){ var elements = jQuery.parseJSON(response); var one = elements.one; var
my_ajax().then(function(response){
var elements = jQuery.parseJSON(response);
var one = elements.one;
var two = elements.two;
//now say that I need to use 'one' outside this function. I try this:
stuff(elements);
});
//这很有效
function stuff(el) {
var something = el.one;
console.log(something);
}
var try_obj = {
please_work: function(el) {
var something = el.one;
console.log(something);
}
};
//这不管用
function stuff(el) {
var something = el.one;
return something;
}
//这很有效
function stuff(el) {
var something = el.one;
console.log(something);
}
var try_obj = {
please_work: function(el) {
var something = el.one;
console.log(something);
}
};
那么,如何存储这种性质的ajax变量,以便在html页面或js文件中重用它们呢?我需要将它们与另一个ajax请求一起发送回去。如果您已经有了一个像
try\u obj
这样的对象,可以全局访问,那么它就很简单:
my_ajax()。然后(函数(响应){
var elements=jQuery.parseJSON(响应);
var one=元素1;
var 2=元素2;
//现在,假设我需要在此函数之外使用“一”。我尝试以下方法:
try_obj.ajaxStore=元素;
});
然后,只要在需要的地方打电话给试试_obj.ajaxStore
这里有一个替代方案。您可以设置一个全局变量:
my_ajax()。然后(函数(响应){
var elements=jQuery.parseJSON(响应);
var one=元素1;
var 2=元素2;
//现在,假设我需要在此函数之外使用“一”。我尝试以下方法:
window.ajaxStore=元素;
});
然后,
ajaxStore
可以在任何地方使用。但是,通常您希望避免使用全局变量。如果您已经有了一个对象,如try\u obj
可以全局访问,那么它很简单:
my_ajax()。然后(函数(响应){
var elements=jQuery.parseJSON(响应);
var one=元素1;
var 2=元素2;
//现在,假设我需要在此函数之外使用“一”。我尝试以下方法:
try_obj.ajaxStore=元素;
});
然后,只要在需要的地方打电话给试试_obj.ajaxStore
这里有一个替代方案。您可以设置一个全局变量:
my_ajax()。然后(函数(响应){
var elements=jQuery.parseJSON(响应);
var one=元素1;
var 2=元素2;
//现在,假设我需要在此函数之外使用“一”。我尝试以下方法:
window.ajaxStore=元素;
});
然后,
ajaxStore
可以在任何地方使用。但是,通常您希望避免使用全局变量。您使用的Ajax不正确。其思想不是让它返回任何东西,而是将数据传递给一个称为回调函数的函数,该函数处理数据(例如,您的第二个AJAX调用)
您错误地使用了Ajax。其思想不是让它返回任何东西,而是将数据传递给一个称为回调函数的函数,该函数处理数据(例如,您的第二个AJAX调用)
在AJAX调用之外声明变量,在AJAX返回中为变量赋值,如下所示:
function myFunction() {
var elements = {};
var promise = $.ajax({
//ajax stuff
}).success(function(response) {
elements = jQuery.parseJSON(response);
});
promise.always(console.log(elements));
}
在AJAX调用之外声明变量,在AJAX返回中为变量赋值,如下所示:
function myFunction() {
var elements = {};
var promise = $.ajax({
//ajax stuff
}).success(function(response) {
elements = jQuery.parseJSON(response);
});
promise.always(console.log(elements));
}
您显示的定义变量超出了我的ajax承诺
var elements;
my_ajax().then(function(response){
elements = jQuery.parseJSON(response);
...
}
console.log(elements);
您显示的定义变量超出了我的ajax承诺
var elements;
my_ajax().then(function(response){
elements = jQuery.parseJSON(response);
...
}
console.log(elements);
如果要将值存储在存在于调用函数外部的变量中,首先需要在函数外部声明它 因此,如果您希望在页面的任何位置都可以使用“something”值,您可以执行以下操作:
my_ajax().then(function(response){
var elements = jQuery.parseJSON(response);
var one = elements.one;
var two = elements.two;
savestuff(elements);
});
//declaring this outside of any function makes it available to all
var something = "";
//save to the previously declared 'something' variable
function savestuff(el) {
something = el.one; /* no 'var' so JS knows to look in page / global scope */
showstuff();
}
//access the value from any function on the page freely
function showstuff(){
alert(something);
}
如果要将值存储在存在于调用函数外部的变量中,首先需要在函数外部声明它 因此,如果您希望在页面的任何位置都可以使用“something”值,您可以执行以下操作:
my_ajax().then(function(response){
var elements = jQuery.parseJSON(response);
var one = elements.one;
var two = elements.two;
savestuff(elements);
});
//declaring this outside of any function makes it available to all
var something = "";
//save to the previously declared 'something' variable
function savestuff(el) {
something = el.one; /* no 'var' so JS knows to look in page / global scope */
showstuff();
}
//access the value from any function on the page freely
function showstuff(){
alert(something);
}
元素
在控制台中始终是一个空对象。log
你说得对。我在想异步。我已经更新了我的答案。元素
在控制台中总是一个空对象。log
你说得对。我在想异步。我已经更新了我的答案。好的,我试试看。我使用return是因为它对我的特定问题有效(见堆栈上的解决方案)。看起来它对我不起作用,除非我重新构建所有代码。尽管如此,我还是竖起了大拇指,因为它让我更加了解这种方法。谢谢!好的,我试试看。我使用return是因为它对我的特定问题有效(见堆栈上的解决方案)。看起来它对我不起作用,除非我重新构建所有代码。尽管如此,我还是竖起了大拇指,因为它让我更加了解这种方法。谢谢!是的,这是有效的(有趣的方法),但是如果我不在savestuff()中调用showsuff(),并且我尝试console.out'something',我将得到一个未定义的。每次我想重用变量时,我都必须调用有问题的函数。我认为没有办法调用.window而不是函数,这样变量就可以独立工作了?是的,在savestuff()中可以使用window.something=el.one;是的,这是有效的(有趣的方法),但是如果我不在savestuff()中调用showsuff(),并且我尝试console.out'something',我将得到一个未定义的。每次我想重用变量时,我都必须调用有问题的函数。我认为没有办法调用.window而不是函数,这样变量就可以独立工作了?是的,在savestuff()中可以使用window.something=el.one;