从另一个Ajax访问Ajax数据

时间:2018-04-18 21:24:02

标签: jquery ajax

我正在尝试访问第一个ajax数据以添加新值(option2)。我可以在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) {
        //...
    }
});

1 个答案:

答案 0 :(得分:1)

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

让我知道

$.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) {
    //...
}
});

修改

作为nurdyguy accurately pointed out,第二个ajax调用确实在第一个数据被提交到服务器BUT之前运行,第二个结果是异步的,并且所有数据都没有在返回之前返回首先发送数据,因此第一个数据不会离开并设置option2。考虑这种解决方法,更改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){}
});

这可行吗?