10

ajax レスポンスがレンダリングされた後に、JavaScript を実行したいと考えています。javascript 関数は、ajax リクエスト中に動的に生成され、ajax レスポンスに含まれています。'complete' および 'success' イベントを使用してジョブを実行しません。Firebug コンソールで ajax リクエストを調べたところ、完全なコールバックが実行されたときに応答がレンダリングされませんでした。

Does not work:

      function reloadForm() {
        jQuery.ajax({
          url: "<generate_form_url>",
          type: "GET",
          complete: custom_function_with_js_in_response()
        });
      };

ajaxComplete は仕事をしますが、ページ上のすべての ajax 呼び出しに対して実行されます。それは避けたい。可能な解決策はありますか?

$('#link_form').ajaxComplete(function() {
  custom_function_with_js_in_response();
});
4

4 に答える 4

14

$.ajax(..).done( do_things_here() ); も使用できます。

$(document).ready(function() {

    $('#obj').click(function() {

    $.ajax({
        url: "<url>"
    }).done(function() {
      do_something_here();
    });
});

});

または別の方法があります

$(document).ready(function() {

    $('#obj').click(function() {

    $.ajax({
        url: "<url>",
        success: function(data){
          do_something_with(data);
        }
    })
});

});

このエンジンを使用して問題を共有し、解決策を試してください。その非常に効率的です。

http://jsfiddle.net/qTDAv/7/ (PS: これには試すサンプルが含まれています)

お役に立てれば幸いです

于 2012-09-24T11:46:11.307 に答える
1

コールバック関数の存在を確認(および必要に応じて呼び出しを延期)して実行すると、次のように機能する場合があります。

// undefine the function before the AJAX call
// replace myFunc with the name of the function to be executed on complete()
myFunc = null; 

$.ajax({
    ...
    complete: function() {
       runCompleteCallback(myFunc);
    },
    ...
});

function runCompleteCallback(_func) {
    if(typeof _func == 'function') {
        return _func();
    }
    setTimeout(function() {
        runCompleteCallback(_func);
    }, 100);
}
于 2012-09-24T11:16:33.253 に答える
0

コードなしではあまり役に立ちません。JQuery ajaxの完全なページの一般的な例として

$('.log').ajaxComplete(function(e, xhr, settings) {
    if (settings.url == 'ajax/test.html') {
        $(this).text('Triggered ajaxComplete handler. The result is ' +
                 xhr.responseHTML);
    }
});

ajaxComplete では、コードを記述したい URL をフィルタリングするための決定を入れることができます。

于 2012-09-24T10:02:46.760 に答える
0

()ajaxオプションなしで関数名を指定してみてください:

function reloadForm() {
        jQuery.ajax({
          url: "<generate_form_url>",
          type: "GET",
          complete: custom_function_with_js_in_response
        });
      };
于 2012-09-24T10:50:29.207 に答える