Jquery 从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

如何访问来自函数返回的ajax请求的变量?我可以控制台输出变量,但似乎无法将其存储在范围之外

它看起来是什么样子:

  • 在html中:

    函数my_ajax(){

    }/*结束我的_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);
    }
    
    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;