-1

さて、基本的に私がやろうとしているのは、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();
    })
4

1 に答える 1

1

おそらくいくつかのことがここにあります。slot_id は範囲外です...まあ、それは var なしで宣言されているため、グローバルです (したがって、利用可能になりますが、ホイストされます) が、実際にはまだ入力されていません。コードの次のステップは、ajax リクエストが返される前に実行されています。次のブロックを deferred に入れてみてください。

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

つまり、ajax 関数が戻るまでコードは実行されません。

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

于 2013-02-23T02:57:01.043 に答える