Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Jquery 从另一个Ajax访问Ajax数据_Jquery_Ajax - Fatal编程技术网

Jquery 从另一个Ajax访问Ajax数据

Jquery 从另一个Ajax访问Ajax数据,jquery,ajax,Jquery,Ajax,我试图访问第一个ajax数据以添加新值(选项2)。我可以使用beforesend函数中的this.data访问第一个ajax数据,但我不能在另一个ajax中使用“this”,因为它引用了它。那么,如何访问第一个ajax数据呢 $.ajax({ type: "POST", url: "controller.php", data: { 'option1': 1 //option2 needs to be accessible here

我试图访问第一个ajax数据以添加新值(选项2)。我可以使用beforesend函数中的this.data访问第一个ajax数据,但我不能在另一个ajax中使用“this”,因为它引用了它。那么,如何访问第一个ajax数据呢

$.ajax({
    type: "POST",
    url: "controller.php",
    data: {
        'option1': 1
        //option2 needs to be accessible here

    },
    beforeSend: function (jqXHR) {
        var firstAjax = this;

        $.ajax({
            type: "post",
            url: "controller.php",
            data: {
                getNewOption: 1
            },
            success: function (res) {
                firstAjax.data += '&' + $.param({
                    option2: res
                });
            }
        });

    },
    success: function (msg) {
        //...
    }
});

如果我理解正确,您需要
res
成为第一个ajax调用中使用的数据的一部分,因为
data
是一个对象,请尝试将res分配给
。选项2

让我知道

$.ajax({
type: "POST",
url: "controller.php",
data: {
    'option1': 1
    //option2 needs to be accessible here

},
beforeSend: function (jqXHR) {
    var firstAjax = this;

    $.ajax({
        type: "post",
        url: "controller.php",
        data: {
            getNewOption: 1
        },
        success: function (res) {
            firstAjax.data.option2 = res
        }
    });

},
success: function (msg) {
    //...
}
});
编辑

正如所述,第二个ajax调用确实在第一个数据提交到服务器之前运行,但是第二个结果是异步的,在第一个数据发送之前没有返回,因此第一个数据没有离开
选项2
集。考虑这个解决方案改变Ajax调用的顺序:

$.ajax({
    type: "post",
    url: "controller2.php",
    data: {
        getNewOption: 1
    },
    success: function (res) {
        $.ajax({
            type: "POST",
            url: "controller1.php",
            data: {
                'option1': 1
                'option2': res
            },
            success: function (msg) {
                //...
            }
        });
    },
    beforeSend: function (jqXHR){}
});

这是否可行?

firstAjax。数据
不是您想要的吗?我尝试过,但无法传递。您想要访问什么,确切时间是什么?您的ajax调用是反向的。您需要将ajax-2的结果作为ajax-1参数的一部分。重写它,以便在ajax-2的
success
部分调用ajax-1。问题是您的
beforeSend
在ajax-2完成之前结束。这意味着ajax-1在ajax-2完成之前启动,这就是为什么您无法获得所需的信息。您正在尝试链接ajax调用,但无法在发送之前以
的方式进行链接。正确的方法是将第二个函数放入第一个函数的
success
中。这不起作用的原因是
beforeSend
函数实际上会在ajax完成之前完成,这就是OP遇到问题的原因。唯一可行的方法是,如果内部ajax是同步的,这是一个非常糟糕的主意。