如何访问来自函数返回的ajax请求的变量?我可以控制变量,但是我似乎无法将它存储在范围之外。
它看起来如何:
在html中:
function my_ajax(){
var stuff = 'stuff';
return $.ajax({
type: "POST",
url: "file.php",
data: {"something": "wrong"}
}); /* end ajax */
} / *结束my_ajax()* /
...然后在js文件中:
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);
}
//这不起作用
function stuff(el) {
var something = el.one;
return something;
}
//这有效
var try_obj = {
please_work: function(el) {
var something = el.one;
console.log(something);
}
};
那么如何从这种性质的ajax中存储变量,以便我可以在html-page或js-file中重用它们?我需要用另一个ajax请求发回它们。
答案 0 :(得分:4)
您正在使用Ajax。这个想法不是让它返回任何东西,而是将数据交给一个叫做回调函数的东西,它处理数据(例如,你的第二个AJAX调用)。
function handleData( responseData ) {
// Do what you want with the data
console.log(responseData);
}
$.ajax({
url: "hi.php",
...
success: function ( data, status, XHR ) {
handleData(data);
}
});
答案 1 :(得分:1)
如果要将值存储在调用函数之外的变量中,则需要在函数外部声明它。
所以,如果你想拥有一些'在页面的任何位置都可以使用值,您可以执行以下操作:
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);
}
答案 2 :(得分:0)
如果您已经有一个像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:
try_obj.ajaxStore = elements;
});
这样的对象可以全局访问,那么它就像:
try_obj.ajaxStore
然后只需从您需要的地方拨打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:
window.ajaxStore = elements;
});
。
这是另一种选择。您可以设置一个全局变量:
ajaxStore
然后可以在任何地方使用{{1}}。但是,通常你想避免使用全局变量。
答案 3 :(得分:0)
在my_ajax promise之外显示define变量。
var elements;
my_ajax().then(function(response){
elements = jQuery.parseJSON(response);
...
}
console.log(elements);