关于Ajax成功的Ajax之外的JQuery调用函数?

时间:2009-10-01 17:24:14

标签: javascript jquery ajax javascript-events

我目前已经创建了一个分页Javascript类,当您获得超过10个页面时,它将自动对注释进行分页。这样可以正常工作,但是我只想在页面上有10个以上的注释时设置一些CSS属性(为按钮添加空间以便在页面之间切换)。这可以在ajax成功完成,但我想保留paginate.js以便其他应用程序可以使用它(应用程序的其他部分不需要添加填充),而不是一堆if if否则只在一个场景中添加填充。那么,有没有什么方法可以将事件绑定到外部的ajax函数的成功?例如,我当前的页面包含以下文件:

pagination.js
detail.js

Pagination通过从detail.js传递以下参数来运行ajax调用:

  p = new paginate({
    table_id: 't1',
    pageselect_max: 7,
    rpp_options: [5,10,25,50],
    rpp: 5,
    columns: [''],
    wildcard: stock_symbol,
    url: 'trader/stocks/ajax/',
    action: 'paginate_comments',
    noresults: false
  });

这就是agax在pagination.js中的样子:

  this.get_results = function() {
    oThis = this; // Needed because inside the success function 'this' points to something else
    $.ajax({
      type: "POST",
      url: this.url,
      data: "action="+this.action+"&rpp="+this.rpp+"&page="+this.page+"&sortBy="+this.sortBy+"&sortDir="+this.sortDir+"&wildcard="+this.wildcard,
      dataType: "json",
      success: function(json) {
        if (json.error) {
          alert(json.error);
        }
        else {
          var data = json.data;
          oThis.count = data.count;
          $("#p_count").text(oThis.count);
          var resText = oThis.count == 1 ? "result" : "results";
          $("#p_results").text(resText);
          if (!data.disable_cufon) {
            Cufon.replace('h2');
            Cufon.replace('h1');
          }
          oThis.results = data.results;
          oThis.update_pageselect();
          oThis.display_results();
          oThis.do_rpp();
        }
      },
      error: function(error) {
        alert(error.responseText);
      }
    });
  }

我希望能够在detail.js中引用成功并运行它:

if(p.maxPages > 1){
  $("#commentscontainer .cmtgocontainer").css("margin-top","48px");
}

我知道这可以通过改变异步属性来实现,但这似乎是不好的做法。没有改变pagination.js的任何更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以创建自己的回调函数并在pagination.js中调用它:

例如:

//In your success callback:
if (typeof oThis.onPaginateComplete === "function")
    oThis.onPaginateComplete();

然后您可以详细编写以下内容.js:

p.onPaginateComplete = function() {
    if (this.maxPages > 1) {
        $("#commentscontainer .cmtgocontainer").css("margin-top","48px");
    }
};