代码之家  ›  专栏  ›  技术社区  ›  martijn_himself

重构许多jquery-ajax调用——最佳实践?

  •  5
  • martijn_himself  · 技术社区  · 15 年前

    我有很多javascript/jquery代码块来处理异步 我的页面中的数据处理。每个代码块有三个功能(代码不完整,仅供说明):

    1. 包封 $.ajax 呼叫:

      function doSomething(data){
      
        // do some preprocessing 
      
        $.ajax({}); // some JQuery Ajax operation that accepts data
      
        // do some postprocessing
        return false;
      }
    2. 处理响应:

      function handleResponse(result){  
        // process the result
        return false;
      }
    3. 处理任何错误:

      function handleError(XMLHttpRequest, textStatus, errorThrown){  
        // gracefully handle the Error and present relevant information to user
        return false;
      }

    在一个需要大量数据处理的页面中,我得到了很多 在这些似乎是重复的块中,我决定做一些 重构。

    我想会有不同的方法来解决这个问题。

    1. 可以有一个错误处理程序,可以在Ajax调用之间重用(显然)。
    2. 可以重用一些响应处理程序,但这是阿克沃德,因为根据调用,响应是非常不同的。
    3. 可能创建某种原型对象,它提供基本功能,并具有用于错误处理的静态方法(可以在javascript中完成吗?).

    我只是想知道是否有人遇到过这个问题和/或是否有一个最佳实践解决方案?

    3 回复  |  直到 13 年前
        1
  •  8
  •   Luca Filosofi    13 年前

    您可以使用jquery中的$.Ajaxsetup()方法来设置一些常见的Ajax设置。

    例如,如果您要在某个页面上一次又一次地发布到同一个URL,您可以在ajaxsetup中设置它。这意味着您必须将更少的参数传递给类似Richard提供的函数。Ajax方法第一个参数的任何属性都可以在$.AjaxSetup()中设置为默认值。

    $.ajaxSetup({
        url: 'my/ajax/url'
        success: function() {
            // Do some default stuff on success
        },
        error: function() {
            // Do some default stuff on a failure
        }
        // etc...
    });
    

    它们可以在任何Ajax调用中被重写。所以,现在你可以做:

    $.ajax({data:{foo:'bar',bar:'foo'}});
    

    您可以覆盖URL,例如:

    $.ajax({url:'different/ajax/url',data:{foo:'bar',bar:'foo'}});
    
        2
  •  7
  •   Richard    15 年前

    我们经常为Ajax调用使用一个包装函数,以简化使用过程,这样您就可以做到:

    function NewAjax(url, data, success)
    {
        $.ajax({
          url: url,
          data: data,
          success: success,
          fail: function ()
          {
            // Do generic failure handling here
          }
    }
    

    但我经常喜欢使用jquery ajax事件绑定到每个ajax事件:

    http://docs.jquery.com/Ajax

    因此,您可以绑定到每个Ajax调用的每个失败或成功,例如:

    Ajaxerror(回调) AjaxSuccess(回调)

        3
  •  0
  •   James Black    15 年前

    如Richard所示,查看代码片段之间的区别,并将它们作为参数传递给函数。JavaScript可以将函数作为参数传递,这样可以消除大量的冗余。

    如果URL没有改变,那么为什么要把它作为一个参数传入,你可以有一个全局变量,它将包含URL的主要部分,并且只传入URL的改变部分。