从返回的ajax成功之外访问变量会破坏我的代码

时间:2013-02-23 02:35:53

标签: jquery ajax

好的,基本上我要做的是获取从MySQL插入返回的“slot_id”的创建id值。 (工作),然后我试图用slot_id的返回值设置新tr的id。变量slot_id正在设置我想我只是使用了这个错误。这是代码。如果我添加console.log(slot_id);在成功中它返回值。

$('#add_slot').click(function(e){
        var slot_id;
        date = $("#slot_date").val(); 
        start_time = $("#slot_start").val(); 
        end_time = $("#slot_end").val();
        speaker_id = $("#speaker").val();
        speaker = $("#speaker option:selected").text();
        event_id = $("#event_id").val();
        last_row = $("tr:last").hasClass('odd');
            $.ajax({
                    type: 'POST',
                    url: 'ajax/process_slot.php',
                    data: {
                        date: date,
                        start_time: start_time,
                        end_time: end_time,
                        speaker_id: speaker_id,
                        event_id: event_id
                    },
                    success: function(response){
                            var $bodyresp=$(response);                 
                        var resp = $bodyresp.filter("#response").text();
                        slot_id = $bodyresp.filer("#slotid").text(); 
/// slot_id is the problem child. Why is it when I access it below to set the tr id value to slot_' + slot_id ......
                        $("#flash_message").html(resp);
                        $('#mask , .popup').fadeOut(300 , function() {
                            $('#mask').remove();  
                        });                    
                    }
                    });
        if(last_row === false){                             
        $("#slot_table").find('tbody')
        .append($('<tr id="slot_'+ slot_id +'" class="odd">')
            .append($('<td>' + date + '</td>' + '<td>' + start_time + '</td>' + '<td>' + end_time + '</td><td>'+ speaker+'</td><td><a class="delete_row" href="#delete_row">Delete Row</a></td>')
            )
        );

        }else {
        $("#slot_table").find('tbody')
        .append($('<tr id="slot_'+slot_id+'" class="even">')
            .append($('<td>' + date + '</td>' + '<td>' + start_time + '</td>' + '<td>' + end_time + '</td><td>'+ speaker+'</td><td><a class="delete_row" href="#delete_row">Delete Row</a></td>')
            )
        );
        }
        e.preventDefault();
    })

1 个答案:

答案 0 :(得分:1)

这里可能有几件事。 slot_id超出范围......好吧,它声明没有var,所以它是全局的(因此可用,但是已经提升),但实际上还没有填充。在返回ajax请求之前,您的下一步代码正在运行。尝试将以下块放在延迟中,例如

$.ajax(...).then( stuff with slot_id )

这意味着在ajax函数返回之前代码不会运行。

http://api.jquery.com/category/deferred-object/