我有一个正常工作的AJAX函数,但我似乎无法访问我在页面后面的函数中声明的变量。如果你查看下面的代码,你会看到我在函数中警告变量number_rows,但当我尝试将它记录在函数之外时,它会以'undefined'的形式返回。
var newData = "user_id=" + id;
$.ajax({
type: 'POST', // HTTP method POST or GET
url: 'ajax.php', //Where to make Ajax calls
dataType:'text', // Data type, HTML, json etc.
data:newData, //post variables
success:function(response){
var number_rows = response;
alert(number_rows);
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
}
});
console.log(number_rows);
我知道我的范围可能不合适。我试图在成功函数中移动我的所有代码,但这导致了许多其他问题,所以最简单的方法是将响应变量作为一个全局变量,我可以在页面的其余部分代码中使用它。我也试过这样的事情:
success:function(response){
$('body').append('<span class="ajax_response" id="' + response + '"></span>');
}
var number_rows = $('.ajax_response').attr('id');
console.log(number_rows);
但由于某种原因,它无法立即获取ID值。我可以确认跨度确实使用正确的ID值,但由于某种原因它无法正确处理它。对此的任何帮助将不胜感激。
谢谢!
答案 0 :(得分:-2)
更改了变量的范围 更改 async:false 或等到服务器收到响应,然后使用该值。
var newData = "user_id=" + id;
var number_rows = ""; //Declare Here
$.ajax({
type: 'POST', // HTTP method POST or GET
url: 'ajax.php', //Where to make Ajax calls
dataType:'text', // Data type, HTML, json etc.
data:newData, //post variables
async: false,
success:function(response){
number_rows = response; //assign here
alert(number_rows);
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
}
});
console.log(number_rows); //Use here
答案 1 :(得分:-2)
是的,您的范围已关闭。如果您在函数内部定义变量,则无法在外部访问它。你的ajax调用也是async和你的任何代码。
将你的console.log放在success函数中,否则即使你在函数之外全局声明变量,它也可能会记录undefined。
var newData = "user_id=" + id;
var number_rows;
$.ajax({
type: 'POST', // HTTP method POST or GET
url: 'ajax.php', //Where to make Ajax calls
dataType:'text', // Data type, HTML, json etc.
data:newData, //post variables
success:function(response){
number_rows = response;
alert(number_rows);
console.log(number_rows); // here, so we are sure it's set.
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr + " " + ajaxOptions + " " + thrownError); //throw any errors
}
});
答案 2 :(得分:-2)
只需添加到您的配置中:
async:false
您的代码可能如下所示:
var newData = "user_id=" + id;
var number_rows = ""; //This is a global variable
$.ajax({
type: 'POST',
url: 'ajax.php',
dataType:'text',
data:newData,
async:false, //<------This is the option you must add
success:function(response){
number_rows = response; //<----- receive data from the server
alert(number_rows);
},
error:function (/*stuff here*/){
//stuff here
}
});
//Check data
console.log(number_rows);
祝你好运^^!