2016-01-03 168 views
0

我正在开发jQuery原型,使用ajax调用更简单。如何将参数传递给委托函数从ajax回调

代码

ajax: { 
    call : function(url,dataToSend,doOnSuccess,doOnFailure) { 
     $.ajax({ 
      type: "POST", 
      url: url, 
      data: dataToSend 
      , 
      //cache: false, 
      success: function (result) {     

        doOnSuccess(); 

      }, 
      error: function(xhr, textStatus, errorText) { 

        doOnFailure(); 

      } 
     }); 

    } 
} 

原型

ajax.call("MyUrl",{data:"MyData To Send"},alert(),alert()); 

比如我要显示警报成功的结果。 那么我怎样才能传递ajax回调参数给我的委托(例如doOnSuccess()和doOnFailure()),我作为参数传递?

最好的问候!

jQuery.when

jQuery.deferred

或者 呼叫的功能,例如:

+0

请添加正确的标签问题 – Oooogi

+0

你的原型比'$ .post(url,params).done(onDone).fail(onFail)'更简单吗?这似乎只是我多余的包装^^ – moonwave99

+0

@ moonwave99:看??我希望能够将回调参数传递给传递给回调的函数:在您的示例中,我想将xhr传递给您传递的onFail函数,得到它了吗? –

回答

0

如果返回回调阿贾克斯jQuery的阅读when or deferred

ajax.call("MyUrl",{data:"MyData To Send"},alert,alert); 
+0

有时我作为代理传递给ajax回调的函数拥有一些参数,所以当在回调函数中调用它们时,我想ti向它们传递一些额外的参数: –

+0

simple:remove()in call function'ajax.call(“MyUrl”, {data:“MyData To Send”},alert,alert);' –

+0

请测试'var ajax = { call:function call(doOnFailure){ doOnFailure(); } }; ajax.call(alert)' –

0

阿贾克斯与否,这是回调的问题在JS中的功能。 你只需要传递函数作为参数。让我们定义自定义doOnSuccess和doOnFailure功能:

function doOnSuccess(data, textStatus, xhr){ 
    /* Do something with data, textStatus, xhr */ 
    alert(data); 
} 

function doOnFailure(xhr, ajaxOptions, thrownError){ 
    /* Do something with parameters) */ 
    alert('error'); 
} 

然后,你可以定义你的Ajax功能:

ajax: { 
    call : function(url,dataToSend,doOnSuccess,doOnFailure) { 
     $.ajax({ 
      type: "POST", 
      url: url, 
      data: dataToSend 
      , 
      //cache: false, 
      success: function (data, textStatus, xhr) {     
        /* Do something with data before doOnSuccess */ 
        doOnSuccess(data, textStatus, xhr); 

      }, 
      error: doOnFailure 
     }); 

    } 
} 

现在,我们可以调用Ajax的功能:

ajax.call("MyUrl",{data:"MyData To Send"},doOnSuccess,doOnFailure); 
+1

'成功:doOnSuccess'就足够了,不含匿名包装。然后OP会意识到整个事情最终变得多余:)) – moonwave99

+0

你是对的。希望在调用之前添加操作数据的选项。 – Oooogi

相关问题