请看一下$ .get()。我需要在后续的$ .post()中使用变量nextId,但是在$ .get()的范围之外存在未定义的问题
$('#addbtn').click(function(){
var insname = $('#ins').val();
var itemexist = false;
$.each($('#selname option'), function(key, value){
if($(this).text() == $.trim(insname)){
itemexist = true;
alert("Item already exists: "+$(this).text());
}
});
if(insname=='') alert("Cannot be empty");
if(!itemexist && insname!='') {
$.get('data1.php',
function(retId){
var nextId = retId;
var incrementlength = 1;
incrementlength+= $('#selname option').length;
$('#selname').attr('size',incrementlength);
$('#selname')
.append($('<option></option>')
.attr('value', nextId).text(insname));
$('#ins').val('');
});
alert(nextId);//nextId is not defined
$.post('data1_1.php', {id: nextId, name: insname},);
}
});
由于
答案 0 :(得分:4)
这是因为$.get
是异步执行的(A
中AJAX
的意思)
你可以:
$.get
更改为$.ajax
并将其与async: false
选项同步$.get
回拨答案 1 :(得分:3)
这里发生的是nextId
在异步回调期间设置,因此当您调用警报时,nextId
未定义,因为它尚未设置。如果您想使用nextId
中返回的$.post()
,则必须在$.post()
回调完成后调用$.get()
。修改你的代码如下,它应该工作:
试试这个:
$('#addbtn').click(function(){
var insname = $('#ins').val();
var itemexist = false;
$.each($('#selname option'), function(key, value){
if($(this).text() == $.trim(insname)){
itemexist = true;
alert("Item already exists: "+$(this).text());
}
});
if(insname=='') alert("Cannot be empty");
if(!itemexist && insname!=''){
$.get('data1.php',
function(retId){
var nextId = retId;
var incrementlength = 1;
incrementlength+= $('#selname option').length;
$('#selname').attr('size',incrementlength);
$('#selname').append($('<option></option>').attr('value', nextId).text(insname));
$('#ins').val('');
alert(nextId);//nextId should be defined
$.post('data1_1.php',
{id: nextId, name: insname},
);
}
});
});