尝试将变量作为参数传递给嵌套的ajax请求回调时,我遇到了一种奇怪的行为:
$('form').on('submit',function(e){
$.ajaxSetup({
header:$('meta[name="_token"]').attr('content')
})
e.preventDefault(e);
$.ajax({
type:"POST",
url:dest_url,
data:$(this).serialize(),
dataType: 'json',
success: function(data){
if($.isEmptyObject(data.error)){
// performing some actions
// at this point, data.id contains my id
// We call an other function,
// which performs an other ajax request,
// with data.id as parameter
listRefresh(data.id);
}else{
// error message
}
},
error: function(data){
// error message
}
})
});
function listRefresh(id){
console.log(id); // At this point, id contains my id
$.ajaxSetup({
header:$('meta[name="_token"]').attr('content')
})
var src_url = location.href + '?id='+id;
$.ajax({
url: location.href,
type: 'GET',
cache: false
})
.done(function(id) {
console.log(id);
// At this point the console outputs
// all my html code in place of id
// I tried to pass data, response, id, but still the same issue
})
.fail(function() {
//error message
});
}
如上面的代码注释中所述,在listRefresh ajax完成回调中,我的变量似乎消失了,console.log在控制台中输出我的整个html代码... 我从来没有见过这样的东西。你有解释为什么,以及如何将我的id作为参数传递给ajax回调?
答案 0 :(得分:3)
传递给done
中函数的第一个参数是来自AJAX请求的响应。你调用变量并不重要,这就是传递给该函数的内容。
您可以捕获闭包中的值,只需给它另一个名称并将其分配给局部变量。像这样:
done(function(response) {
var theId = id;
// "response" contains the response from the server.
// "theId" contains the value of `id` from outside this function.
})
答案 1 :(得分:2)
.done()
方法的参数是AJAX调用的响应。如果您的调用返回了HTML页面,id
变量会获得分配给它的所有html字符串。
要将id保存在其变量中,只需使用另一个,如:
.done(function(data) {
console.log(data)
console.log(id);
});