0

タイトルがわかりにくいので申し訳ありませんが、それを説明するためのより良い方法を見つけることができませんでした。

状況は次のとおりです。

関数overview()では、ダイナミックhtmlとともにAJAX呼び出しでデータを取得します。そのAJAX成功コールバック内で、新しいhtmlに対して特定のハンドラーを実行します。それらのハンドラーの1つで、別のAJAX呼び出しを投稿しています。

ここで私の問題があります。更新されたデータを取得するために、2番目のAJAX成功コールバックで最初のAJAX呼び出しをリロードしたいと思います。どうすればよいですか?

ありがとう

編集:要求に応じて、ここに私のコードがあります(簡略化)

function overview() {
    var dataString = '...';
    $.ajax({
        type: 'POST',
        url: 'get-data.php?',
        cache: false,
        data: dataString,
        success: function(data) {
            $('table.table-overview tr.table-heading').after(data);

            $('tr.new-tr span.status').click(function() {
                var dataString = '...';
                $.ajax({
                    type: 'GET',
                    url: 'change-status.php?',
                    cache: false,
                    data: dataString,
                    success: function(response) {
                        if(response == 'saved') {
                            overview();
                        }
                    }
                });
            });
        }
    });
}

解決済み:試行錯誤の末、.click()ハンドラーを.live('click')に置き換えると、機能するようになりました

4

3 に答える 3

2

追加されたサブ質問に答えるために、このコード行を実行すると

$('tr.new-tr span.status').click(function() {})

クリックイベントリスナーをアタッチするために、その時点で存在する すべて<span class="status"/>の内部を取得するようにブラウザに指示しています。は異なります()。クリックするたびに、内部にある場合は関数を呼び出します(これは、ライブイベントがバインドされたときに存在しなかったスパンに対して機能します)。どちらのアプローチも、ajaxコールバックの成功イベント内では不適切です。最初にajax呼び出しの外部でライブの偶数リスナーをバインドしてから、後で作成された場合でも内部でのみ起動することを信頼できます。<tr class="new-tr"/>.[live][1]('click')<span class="status"/><tr class="new-tr"/>

于 2012-10-02T22:03:31.007 に答える
0

これがあなたの説明だと思います。

function ajax1(callback){

    $.ajax({
        ...
    }).done(callback);

}


function ajax2(callback){

    $.ajax({
        ...
    }).done(callback);

}


function overview(){

    loadAjax1(); // start off the ajax loading

}

function loadAjax1(){

    // get first ajax data
    ajax1(function(resp){

        $('body').html(resp) // put the ajax data in your dom, attach your handlers and such


        // find certain element to bind second ajax call
        $('body.find-your-item').click(function(){

            // when clicked, perform second ajax call, and on callback, recall intial ajax load
            ajax2(loadAjax1);
        });

    })

}
于 2012-10-02T15:55:23.053 に答える
0

問題がわからない。しかし、あなたはajaxリクエストを連鎖させることができます...だからあなたは次のようなことをすることができます

function func1(){
   $.ajax(){
      url: "whatever.html",
      type: json
      success: func2(data)
   }
 }

 function func2(input){
 //do something with input here

  $.ajax(){
      url: "whatever2.html",
      type: json
      success: func3(data)
   }
  }

ajaxリクエストにパラメータがありません。func2のリクエストは、入力パラメータ「input」からデータを投稿できます。ページに複数のajaxリクエストがあることは問題ではないはずですが、それらがいつ起動するかを心配し、正しいデータを相互に渡すことを確認する必要があります...

于 2012-10-02T15:49:53.253 に答える