1

以下では、単純な ajax 呼び出しを行っていることがわかります。ただし、呼び出しが正常に完了した後、ローダー div をページから削除したいと考えています。問題は、成功関数が起動しないことです。なぜですか?

utils.get_do stuff = function AJAX_do stuff() {    
    $.getJSON('/url//',
        function (data) {
            $.each(data, function (key, val) {
                // I do stuff with the data here.
            });
        },
        function (success) {
            $('#loader').hide();
        }
    );
};
4

5 に答える 5

4

ここに の例があり ます。完全なハンドラーでgetJSONを非表示にする必要があると思います。そのため、リクエストが失敗しても成功しても非表示になります。$('#loader')$('#loader')

 $.getJSON( "/sms/fetch_smartpages/", function() {
    console.log( "success" );
        $.each(data, function (key, val) {
         //I do stuff with the data here.
        });
        $('#loader').hide(); //<==== moved from here
    })
    .done(function() { console.log( "second success" ); })
    .fail(function() { console.log( "error" ); })
    .always(function() { 
                console.log( "complete" ); 
                $('#loader').hide(); // moved here
     });

http://api.jquery.com/jQuery.getJSON/

于 2013-04-29T15:22:20.350 に答える
2
$.getJSON('/sms/fetch_smartpages/', 

// This callback function is executed if the request succeeds.
function(data) {

  $.each(data, function(key, val) {
     // I do stuff with the data here.
  });

  // Hide loader here
  $('#loader').hide();
});
于 2013-04-29T15:21:45.543 に答える
1

http://api.jquery.com/jQuery.getJSON/

$.getJSON('/sms/fetch_smartpages/',function (data) { // <-- this is your success handler
      $.each(data, function (key, val) {
        I do stuff with the data here.
      });
      $('#loader').hide();
});
于 2013-04-29T15:22:14.103 に答える
1
$.getJSON( "example.json", function() {
  console.log( "success" );
})
.done(function() { console.log( "second success" ); })
.fail(function() { console.log( "error" ); })
.always(function() { console.log( "complete" ); });
于 2013-04-29T15:23:07.213 に答える
1

2 番目のパラメーターの目的を誤解していると思われます。$.getJSON()通常は、リモート サーバーに渡されるデータを提供するために使用される JS オブジェクトが含まれています。

代わりに「成功」​​コールバックとして使用されている関数参照を渡したため、3 番目のパラメーターは無視されます。

本当に 2 つの別々の「成功」コールバックを使用したい場合は、以下を使用できます.done(f1, f2)

$.getJSON(...).done(function (data) {
        $.each(data, function (key, val) {
            // I do stuff with the data here.
        });
    },
    function (success) {
        $('#loader').hide();
    }
);

両方の関数に標準(response, status, jqXHR)のパラメータ セットが渡されることに注意してください。

于 2013-04-29T15:24:33.737 に答える