0

初めて jquery post() を使用していますが、返されたデータを単純に追加することはできません。私の場合、データは、アクションが呼び出すページの単なるテーブル行です。私はこれを持っています

                        $.post(mysaveurl , $("#installment_form").serialize(), "html")
                            .success(function(data){                                            
                                $( "#paymentplantable table tbody" ).append( data );
                                $dialog.dialog( 'destroy' );
                            }).error(function(){
                                alert("Please ensure that all fields are populated.");
                            });

データがデータベースにヒットしていますが、ダイアログが破棄されません。これは、追加している行がフローを殺すことを意味します。注:上記では「html」パラメーターを使用しましたが、例で使用されているのはxmlとjsonだけだったので、そのライガルかどうかはわかりません。次に、これに変更しました

                        $.post(mysaveurl , $("#installment_form").serialize())
                            .success(function(data){
                                $dialog.dialog( 'destroy' );
                                var content = $( data ).find( 'tr' );          
                                $( "#paymentplantable table tbody" ).append( content );
                            }).error(function(){
                                alert("Please ensure that all fields are populated.");
                            });

データを取得しているという点で機能しましたが、テーブル行を既存のテーブルに追加すると、セルの形式が正しくありません。firebug で DOM を調べると、テーブルは構造的に正しいのですが、適切なテーブル行として表示されず、すべてのデータが左側に「圧迫」されています。

次に、HTMLが正しく渡されていないと思ったので、次のようにjquery html()メソッドを使用しました

var content = $( data ).find( 'mydivwrapper' ).html(); 

ここで、「mydivwrapper」は tr の周りに配置された div であり、返される「データ」を介して入ります。これも悪い考えでした。

助けてください。

編集:

スクリプトを少し変更しました。これを見る

                        dataString = $("#installment_form").serialize();
                        $.ajax({
                            type: "POST",
                            url: mysaveurl,
                            data: dataString,
                            dataType: "text",
                            success: function(data) {                                                                       
                                alert(data);
                            }
                      });

返されたデータを警告すると、これが得られます

<?xml version="1.0" encoding="UTF-8"?>
<html><tr><td>31</td><td>147.0</td><td>Monday 14 November, 2011</td><td style="height:20px; width:20px;" class="edit_in_table"/><td style="height:20px; width:20px;" class="remove" id="/starburst/invoices/removeInstallment/14/31"/></tr></html>

解決済み: アクションでテーブル行を作成し、マークアップを文字列として返しました。上記の動作が発生した理由がわかりません。

さらに、この投稿を読んでいる人のために、フォームを jquery ダイアログに投稿するのが非常に困難でした。ご覧のとおり、ダイアログを動的に作成しましたが、DOM にはありませんでした。$("#mydialig").remove(); を呼び出す必要がありました。私の日付ピッカーを毎回表示させ、フォームフォームが以前の値を送信するのを防ぎます。これが最終的なコードです。

    function addInstallment(){
        $("#newinstallment").live("click", function(){
            var $dialog = $('<div></div>');
            var mysaveurl = $(this).attr("saveurl");
            $dialog.load($(this).attr("formurl"), function(){
                $( "#mydatepicker" ).datepicker();
            }).dialog({
                title: 'Add new payment item',
                width: 450,
                modal: true,
                buttons: {
                    Save: function() {
                        dataString = $("#installment_form").serialize();
                        $.ajax({
                            type: "POST",
                            url: mysaveurl,
                            data: dataString,
                            dataType: "text",
                            context: $(this),
                            success: function(data) {
                                $( "#paymentplantable table tbody" ).append(data);
                                var newremoveurl = "${removeinsturlNoIds}"+$("#paymentplantable tr:last td:last").attr("id");
                                $("#paymentplantable tr:last td:last").attr("id", newremoveurl);
                                $( this ).remove();
                            }
                      });
                    },
                    Cancel: function() {
                        $( this ).dialog( 'destroy' );
                    }
                }
            }); 
        });
    }
4

1 に答える 1

0

データは、firebug で検査したときに構造的に正しいことと、不正な形式であることの両方を行うことはできません。たとえば、すべての開始タグに一致する終了タグがあること、すべての<td>s が実際に 内にあること<tr>などを確認している可能性がありますが、返されたテーブル行にテーブルと同じ数の列があることを確認しましたか?に追加されていますか?ajaxが行を追加する前に、テーブルにスタイルが適用されていますか? (例: いくつかの CSS クラスを追加してテーブルをきれいにする jQuery グリッド)。これですぐに取得できない場合は、行が追加される前後にテーブル html を firebug からコピーし、編集として質問にコードを投稿してください。

また、破棄する前に .dialog('close') を呼び出すこともできます (または、後でダイアログを再利用する予定がある場合は、破棄する代わりに)。Close は、構成された jQuery 効果を使用し、必要なイベント ハンドラーを起動して、ダイアログを視覚的に閉じます。Destroy は、DOM からスタイルとイベント ハンドラーを実際に削除します (それらを使用することはありません)。

編集:これは、テーブルに行を追加するコードが期待どおりに機能することを最初に確認するための jsfiddle です。それは私のために働くので、見てみましょう: http://jsfiddle.net/BenSwayne/ADsxU/

成功ハンドラにブレークポイントを設定できます$( "#paymentplantable table tbody" ).append( data ); か? これは、返されるデータが目的の形式であることを確認するのに役立ちます。(それは「xml」であり、データ オブジェクト内のプロパティ内に含まれていませんか?)

于 2011-11-28T20:45:48.143 に答える