在ajax函数之外传递变量

时间:2013-11-26 21:11:10

标签: javascript jquery ajax

请帮助 - 我有以下代码,它会在警报中返回变量'results'。我想在函数之外使用这个变量,并且无法获得回调或外部声明才能成功运行。我确定我是一个布偶,所以我为这个基本问题道歉......

<script src='http://code.jquery.com/jquery-1.9.1.js'></script>
<script>

$(function () {
    $.ajax({
        type: 'POST',
        dataType: 'jsonp',
        url: 'https://creator.zoho.com/api/json/my-company-culture/view/PageFeed_Report?scope=creatorapi&authtoken=d670dc68ac0f6d7ca389e7b206a25045',
        success: function (results) {
            var raw_result=JSON.stringify(results);
            alert(results);
        }
    });
});

 </script>

3 个答案:

答案 0 :(得分:4)

jQuery 1.5+解决方法的方法是使用延迟对象:

var res;

var ajax = $.ajax({
    type: 'POST',
    dataType: 'jsonp',
    url: ...
}).done(function(results) {
    // you may safely use results here
    res = results;
    ...
});

// you cannot safely use 'res' here, only in code
// invoked via a 'done' callback on the `$.ajax` promise

console.log(res);    // undefined

尝试将results复制到外部作用域中的其他变量是不正确的,除非您确保在AJAX调用完成之前没有其他代码尝试访问该变量。

答案 1 :(得分:3)

好吧,为什么不呢:

    <script src='http://code.jquery.com/jquery-1.9.1.js'></script>
    <script>
    function do_the_stuff(smth) {
         console.log(smth);//or do whatever you want to do with this data
    }
    $(function () {
        $.ajax({
            type: 'POST',
            dataType: 'jsonp',
            url: 'https://creator.zoho.com/api/json/my-company-culture/view/PageFeed_Report?scope=creatorapi&authtoken=d670dc68ac0f6d7ca389e7b206a25045',
            success: function (results) {
                var raw_result=JSON.stringify(results);
                do_the_stuff(results);
            }
        });
    });

    </script>

这对我来说很好。我没有看到任何问题。

答案 2 :(得分:-1)

我不确定会有什么好处,只需将其保存到全局定义的变量中。

var global;

$(function () {
    $.ajax({
        type: 'POST',
        dataType: 'jsonp',
        url: 'https://creator.zoho.com/api/json/my-company-culture/view/PageFeed_Report?scope=creatorapi&authtoken=d670dc68ac0f6d7ca389e7b206a25045',
        success: function (results) {
            var raw_result=JSON.stringify(results);
            global = results;
        }
    });
});

更好的解决方案是将其传递给您需要它的功能。

    success: function (results) {
        var raw_result=JSON.stringify(results);
        doMoreThings(results);
    }