【问题标题】:Reuse the same AJAX calls重用相同的 AJAX 调用
【发布时间】:2017-11-03 23:54:54
【问题描述】:

我有几个对 url 非常相似的 ajax 请求,但应该对不同点的响应做不同的事情。因此,我不是每次需要时都编写新的 ajax 调用,而是尝试将 ajax 调用作为带参数的函数重用:

function createAjaxObj(type,name,id,successFunc){
    var config = {
        url: MY_URL,
        type: type,
        data: {
            name : name,
            id : id,
        },
        headers: { "X-CSRFToken": returnCsrfToken(); },  
        success: successFunc,
        error: function(xhr,ajaxOptions, thrownError) { console.log('error=',xhr);},
    };  
    $.ajax(config);
}

所以现在,我打算在每次需要时调用这个函数:

var myFunc = function(context){console.log(context)}
createAjaxObj("GET","MyName",58,myFunc)

我想知道这是否是一个好主意或常见做法,还是有更简单的方法来实现这一点?

【问题讨论】:

    标签: javascript jquery ajax callback


    【解决方案1】:

    我会以 Promise 的方式来做:

     function myAjax(type, name, id) {
        return $.ajax({
          url: MY_URL,
          type: type,
          data: {
            name : name,
            id : id,
          },
          headers: { "X-CSRFToken": returnCsrfToken(); })
        })
        .fail(function(){
          console.log('error');
        });
      }
    
      var myFunc = function(context){ console.log(context); };
      myAjax("GET", "MyName", 58).then(myFunc);
    

    【讨论】:

      【解决方案2】:

      如果您对响应所做的操作发生变化,您可以做出承诺:

      function createAjaxObj(type,name,id,successFunc){
        return $.ajax({
           url: MY_URL,
           type: type,
           data: {
             name: name,
             id: id
           }
        })
      }
      

      现在你可以像这样运行它了:

      createAjaxObj('foo', 'bar', 1)
        .then(function(data) { // do something with data })
        .error(function(err) { // do something with error })
      

      我认为这应该适合你。如果没有,请告诉我,我会为它创建一个小提琴。

      【讨论】:

        猜你喜欢
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 2014-08-14
        相关资源
        最近更新 更多