我正在尝试访问第一个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) {
//...
}
});
答案 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){}
});
这可行吗?