存储来自AJAX的变量

时间:2015-12-17 22:07:34

标签: jquery ajax

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

它看起来如何:

  1. 在html中:

    function my_ajax(){

    var stuff = 'stuff';
    return $.ajax({
        type: "POST",
        url: "file.php",
        data: {"something": "wrong"}
    }); /* end ajax */  
    

    } / *结束my_ajax()* /

  2. ...然后在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请求发回它们。

4 个答案:

答案 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);
    }
});

Reference

答案 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);