使用自定义函数作为另一个

时间:2015-09-22 16:46:34

标签: javascript jquery ajax

我目前正在处理重构我的代码,并尝试按如下方式自动执行AJAX请求:

目标是使用与上下文无关的函数来启动AJAX请求。收集的数据根据​​上下文进行不同的处理。

这是我的功能:

function ajaxParameter(routeName, method, array, callback){

//Ajax request on silex route
var URL = routeName;

 $.ajax({
  type: method,
  url: URL,
  beforeSend: function(){
    DOM.spinner.fadeIn('fast');
  },
})
.done(function(response) {
    DOM.spinner.fadeOut('fast');

    callback(response);

 })
 .fail(function(error){
    var response = [];
    response.status = 0;
    response.message = "Request failed, error : "+error;
    callback(response);
 })
}

我的问题主要来自于我的回调函数没有定义。 我想这样调用函数(例子)

ajaxParameter(URL_base, 'POST', dataBase, function(response){
    if(response.status == 1 ){
        console.log('Request succeeded');
    }
    showMessage(response);
});

我想过将响应返回给变量并稍后处理它,但如果请求失败或速度很慢,这将无法正常工作(因为响应不会被设置)。

该版本可让我受益.done().fail()

编辑:所以没有错,我改变了我的代码。目标是能够处理.done().fail()上下文中使用的回调函数(虽然两个单独的函数也适用)。

2 个答案:

答案 0 :(得分:0)

你的意思是这样的,传递成功和失败的回调:

function ajaxParameter(routeName, method, array, success, failure) {

    //Ajax request on silex route
    var URL = routeName;

    $.ajax({
        type: method,
        url: URL,
        beforeSend: function () {
            DOM.spinner.fadeIn('fast');
        }
    }).done(function (response) {
          DOM.spinner.fadeOut('fast');
          success(response);
    }).fail(function (error) {
          var response = [];
          response.status = 0;
          response.message = "Request failed, error : " + error;
          failure(response);
    })
}

叫做:

ajaxParameter(
   URL_base, 
   'POST',
   dataBase, 
   function(response){
       //success function
   }, 
   function(response){
       // fail function
   }
);

答案 1 :(得分:0)

据我所知,您的脚本确实没有问题。我已经在这里加了一点,但它基本上就是你以前所拥有的:

function ajaxParameter (url, method, data, callback) {

    $.ajax({
        type: method,
        url: url,
        data: data,
        beforeSend: function(){

            DOM.spinner.fadeIn('fast');

        }
    })
    .done( function (response) {

        DOM.spinner.fadeOut('fast');

        if (callback)
            callback(response);

     })
     .fail( function (error){

        var response = [];

        response.status = 0;

        response.message = "Request failed, error : " + error;

        if (callback)
            callback(response);

     });
}

现在让我们去测试它here on JSFiddle

正如您所看到的(使用JSFiddle AJAX API),它可以正常工作。所以问题可能在你的脚本中有其他东西。您确定您在此处发布的脚本与您在开发环境中使用的脚本相同吗?

关于你的错误;绝对确保您以正确的顺序将正确的参数传递给ajaxParameter函数。这是我在fiddle中传递的内容:

  • 网址端点(例如http://example.com/
  • 方法(例如'post')
  • 一些数据(例如{foo:'bar'})
  • 回调(例如function(response){};)