1

下面你可以看到我正在做一个简单的 ajax 调用。但是,在调用成功完成后,我想从页面中删除加载器 div。问题是success函数没有触发,为什么?

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
$.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

我怀疑您将第二个参数的用途误解为$.getJSON()- 它通常包含一个 JS 对象,用于提供将传递给远程服务器的数据。

当您传递了一个函数引用而不是用作“成功”回调时,第三个参数将被忽略。

如果你真的想使用两个单独的“成功”回调,你可以使用.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 回答
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 回答