Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将从ajax调用获取的数据返回给另一个函数_Php_Javascript_Jquery_Ajax - Fatal编程技术网

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

Php 将从ajax调用获取的数据返回给另一个函数,php,javascript,jquery,ajax,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 ca

所以我有这个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调用是有效的,但是为什么我不能将值返回给另一个函数呢? 对我来说,我的大脑工作不正常


干杯

使用全局范围声明此cartlimit。在函数启动前重新标记此项

var cartlimit;
function get_cart_limit() {
$.ajax({
...................
这里,只有在ajax函数成功后,才会声明cartlimit


但在成功之前,可能需要执行其他脚本。因此它将变得未定义

您可以像这样将输出数据传递给指定的函数

var cartlimit = get_cart_limit(output);

如果更改cartlimit变量的范围并禁用异步请求,get\u cart\u 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;
}

变量
cart\u limit
仅在AJAX请求成功终止后设置

为什么?

  • AJAX调用是异步的,即
    get\u cart\u limit()
    在服务器返回实际答案之前结束
  • 当服务器返回答案时,将调用指定为
    success:function(output){/*…*/}
    的匿名函数
  • 如果在执行success函数之前调用另一个试图访问
    cart\u limit
    的函数,则会得到一个未定义的值

    即使在
    success
    函数中执行return语句,它也是与get\u cart\u limit()不同的函数,并且在不同的时间执行,因此将返回值赋给任何变量都不会获得所需的效果

    解决这个问题的一个方法是让匿名成功函数调用需要
    cart\u 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){
            }
        });
    }
    

    由于ajax调用是异步的,所以未定义变量是正常的。是的,这是可行的,但您将锁定浏览器,直到请求完成。