Javascript 为什么参数被分配到回调?

Javascript 为什么参数被分配到回调?,javascript,ajax,jquery,Javascript,Ajax,Jquery,我有一个javascript函数: function triggerUpload(success, error, callback) { var options = { type: 'post', success: success, error: error }; $("input[name=file]").change(function() { $(this).parent().ajaxSubmit(op

我有一个javascript函数:

function triggerUpload(success, error, callback) {
    var options = {
        type: 'post',
        success: success,
        error: error
    };

    $("input[name=file]").change(function() {
        $(this).parent().ajaxSubmit(options);
    });
    if (callback) {
        callback();
    }
}
我用它来表示:

triggerUpload(function() {
   applyPostAjax(postUrl);
});
它的工作原理很好:当有人单击
时,
触发上传
事件会发生,并将
applyPostAjax
作为其参数分配给
回调
,该参数可以保持为
null
,作为其可选参数

注意:这些方法是由其他人编写的,我无法清楚地获得它们。我是javascript的新手

我的问题是:我只向这个函数传递一个参数。有人会认为这个参数会被分配到
success
。如何/为什么将其分配给回调?这些
success
error
参数是用来做什么的


请解释参数
success
error
是回调函数(与您决定调用的“回调”参数相同),在
ajaxSubmit
方法成功传输表单数据或遇到错误时执行

因此,在函数调用中,您提供了
success
回调,但没有提供
error
回调或
callback
回调。由于执行了函数,因此可以假定
ajaxSubmit
操作已成功提交表单

如果认为参数被分配到
success
而不是
callback
,则100%正确


jQuery表单插件的完整文档可在以下位置获得:

在这里:

具体而言,
success
回调的文档说明:

成功

创建表单后要调用的回调函数 提交。如果提供了“success”回调函数,则会调用该函数 从服务器返回响应后。它通过了 以下论点:

1.)responseText或responseXML值(取决于数据类型选项的值)

2.)状态文本

3.)xhr(如果使用jQuery<1.4,则使用jQuery包装的表单元素)

4.)jQuery包装的表单元素(如果使用jQuery<1.4,则未定义)

这意味着成功功能的正确原型应该是:

triggerUpload(function(response,status,xhr,form) {
   applyPostAjax(postUrl);
});
尽管提供一个具有更多或更少参数的函数是非常好的,因为javascript允许函数被更少或更多的参数调用,而这些参数在函数的形式声明中并不存在。因此,如果您只对上传功能的结果感兴趣,您可以执行以下操作:

triggerUpload(function(response) {
   applyPostAjax(postUrl);
});

或者,如果你不关心服务器的响应,你可以像以前那样调用它。

正如其他人所说,所有三个成功、错误和回调函数都应该是函数。但是,它们有不同的目的:

  • success-在ajax提交成功完成后调用
  • error-在ajax提交中出现错误时调用
  • callback-无论提交过程中发生什么情况都会调用。我猜添加这个只是为了确认更改处理程序已分配给输入字段

换句话说,调用triggerUpload不会提交表单。您只需将处理程序附加到文件输入按钮。一旦您更改了它,即您选择了一个文件,表单将被提交,然后您将得到一个响应。

所有3个参数都必须是函数,您是否传递函数?@elclans否,我只传递一个参数作为applyPostAjax(postrl);无论如何,它会被分配到回调。不可能,如果这是确切的代码,并且您传递了一个参数(一个函数),它将被分配到
success
postrl
必须是一个函数,是吗?@elclars
postrl
不是一个函数它是一个类似“user/post/20”的url字符串它将被分配给success,当$(this.parent().ajaxSubmit(options)时可能会调用success;已成功执行。您是否尝试在if(callback)中添加日志语句并检查它是否实际分配给callback?您的意思是我的
applyPostAjax()
被分配给
success
,而不是
callback
?由于此
成功
参数而不是
回调
参数而执行。那么我应该如何使用它们呢?要正确使用它们,请阅读相关文档。由于
ajaxSubmit
很可能是jQuery表单插件的一种方法,因此我从这里开始:(注意:单击顶部的选项卡以查看关于options对象的文档和一些示例代码)我找到了它。我根本不需要
回调
参数。我只想执行
applyPostAjax(postrl)一旦表单提交成功。因此,如果我在使用时使用
triggerUpload
,它将被分配到
success
,并在成功提交表单后执行。我说的对吗?那么
错误
呢?我应该删除还是保留它?您可能还需要处理错误。最起码,只需弹出一条消息,告诉用户在向服务器提交数据时出错,并告诉他稍后刷新或访问页面。像Twitter的fail whale一样,这样的错误消息不应该发生,但当它们发生时,它们会让你的网站看起来更专业,而不仅仅是悄无声息地崩溃。