Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将自定义函数用作其他函数的参数_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 将自定义函数用作其他函数的参数

Javascript 将自定义函数用作其他函数的参数,javascript,jquery,ajax,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: fu

我目前正在处理代码重构,并尝试按如下方式自动化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);
 })
}
我的问题本质上是因为我的回调函数没有定义。 我想这样调用函数(示例)

我考虑将响应返回到一个变量,稍后再处理它,但如果请求失败或速度慢,这将不起作用(因为不会设置响应)

该版本将使我受益于
.done()
.fail()


编辑:所以没有错,我稍微修改了我的代码。我们的目标是能够处理
.done()
.fail()
上下文中使用的回调函数(但在我的情况下,两个单独的函数也可以工作)。

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

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
   }
);

据我所知,你的剧本真的没有问题。我在这里稍微整理了一下,但基本上是你以前拥有的:

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);

     });
}
现在让我们来测试一下

如您所见(使用JSFIDLE AJAX API),它可以正常工作。因此,问题可能与脚本中的其他内容有关。您确定您在此处发布的脚本与您在开发环境中使用的脚本相同吗

关于你的错误;绝对确保以正确的顺序将正确的参数传递给
ajaxParameter
函数。以下是我在课堂上要讲的内容:

  • url端点(例如)
  • 方法(例如“post”)
  • 一些数据(例如{foo:'bar'})
  • 回调函数(例如函数(响应){};)

为什么不像使用
.done()
方法那样,在
.fail()
方法中使用
回调
?您说您的目标是拥有一个“与上下文无关的函数来启动AJAX请求”。这不正是
$.ajax
方法的作用吗?我不清楚到底是什么错了,如果您像在示例中那样使用匿名函数调用ajaxParameter函数,它应该可以工作。@shennan这不完全是我的问题,它在.done()中也不起作用,这样做的目的是避免重复请求的代码。@Yoda也应该对此感兴趣,我的控制台告诉我
未捕获类型错误:回调不是函数
。您是否尝试过将此特定代码与项目的其余部分隔离并运行它?我相信您会看到它的工作原理与深南提供的js小提琴一样。从那里你可以开始一个消除过程,通过调用堆栈来确定你的bug到底在哪里。这正是我想要做的,不幸的是,当我尝试使用“callback”参数时,我的控制台告诉我这是
未捕获的类型错误:callback不是一个函数
非常感谢你的帮助。我使用两个脚本。首先是函数的通用术语表(包括ajaxParameter),然后每个视图都有自己的脚本(按此顺序调用脚本)。该错误显示在函数定义中。该函数在我的脚本中被这样调用:
ajaxParameter(URL_base,'POST',数据库,函数(response){console.log(response);},函数(response){console.log(response);})
@PaulGabriel如果不了解调用方法的位置,我不明白为什么会出现
未捕获的TypeError
。就我而言,您正在传递一个
函数
作为
回调
参数。您的代码当前所在的位置是否有实时url?或者你能上传一个例子吗?它可以让你访问,但它是受保护的,所以如果你愿意帮助,我需要私下联系你。更多细节:这是一个Symfony环境,我使用Assetic编译和链接javascript文件。控制台错误甚至在调用函数之前就发生了,声明函数时也会发生。我不确定我们如何私下联系。Stack Overflow chat只允许拥有20个以上声誉的成员,而您目前没有。关于您的第一条评论,您是说在尝试调用
ajaxParameter
时发生错误吗?在这种情况下,听起来您可能存在范围问题。您能否确认或取消确认程序(在您调用
ajaxParameter
函数时)知道什么是
ajaxParameter
?类似这样的
console.log(ajaxParameter)
可能吗?实际上,在定义
ajaxParameter
时会发生错误(它甚至没有调用它)。如果你有推特,你能在@paulgabriel给我发推特吗?
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);

     });
}