将获取的数据从ajax调用返回到另一个函数

时间:2012-03-28 06:41:17

标签: php javascript jquery ajax

所以我有这个javascript函数,它发送一个ajax请求来从php变量中获取一个值。

该功能如下:

function get_cart_limit() {
$.ajax({
    url: '/w2w/ajax/',
    data: {
        _action: 'get_cart_limit'
    },
    type: 'post',
    timeout: 10000,
    success: function(output) {
        var cartlimit = output;
                    alert(cartlimit); // this gives me the correct value.
        return cartlimit;
    },
    error: function(output){

    }
});

}

当我从另一个函数调用此函数时:

var cartlimit = get_cart_limit();

我的变量“cartlimit”未定义。

所以ajax调用正在工作,但为什么我不能将值返回给另一个函数? 为了我早,我的大脑不能正常工作! :)

干杯!

4 个答案:

答案 0 :(得分:1)

如果更改 cartlimit 变量的范围并禁用异步请求, get_cart_limit()应返回正确的值

function get_cart_limit() {
var cartlimit;
$.ajax({
    url: '/w2w/ajax/',
    data: {
        _action: 'get_cart_limit'
    },
    type: 'post',
    timeout: 10000,
    async: false,
    success: function(output) {
        cartlimit = output;

    },
    error: function(output){
    }
});
return cartlimit;
}

答案 1 :(得分:1)

仅在AJAX请求成功终止后才设置变量cart_limit

为什么呢?

  1. AJAX调用是异步的,即get_cart_limit()在实际答案从服务器返回之前结束
  2. 当答案从服务器返回时,将调用您指定为success: function(output) { /*...*/ }的匿名函数。
  3. 如果在执行成功函数之前调用另一个试图访问cart_limit的函数,则会得到一个未定义的值。

    即使你在success函数中执行一个return语句,它也是与get_cart_limit()不同的函数,它会在不同的时间执行,所以你不会获得分配返回值所需的效果任何变量。

    解决这个问题的方法是让匿名成功函数调用需要cart_limit的函数。

    function get_cart_limit() {
        $.ajax({
            url: '/w2w/ajax/',
            data: {
                _action: 'get_cart_limit'
            },
            type: 'post',
            timeout: 10000,
            success: function(output) {
                var cartlimit = output;
                alert(cartlimit); // this gives me the correct value.                
                function_that_needs_cart_limit();
            },
            error: function(output){
            }
        });
    }
    

答案 2 :(得分:0)

使用全局范围声明此 cartlimit 。在函数开始之前对此进行Decalre

var cartlimit;
function get_cart_limit() {
$.ajax({
...................

这里只有在ajax函数成功后才会声明cartlimit。

但是在成功之前可能需要执行另一个脚本。所以它会得到未定义的

答案 3 :(得分:0)

您可以将输出数据传递给指定的函数,如此

var cartlimit = get_cart_limit(output);