如何使用$ .get()中的变量

时间:2011-03-27 07:46:44

标签: jquery

请看一下$ .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},);
    }
});

由于

2 个答案:

答案 0 :(得分:4)

这是因为$.get是异步执行的(AAJAX的意思)

你可以:

  1. $.get更改为$.ajax并将其与async: false选项同步
  2. (首选)在$.get回拨
  3. 中执行所有工作

答案 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},
                    );
            }
        });


});