Javascript 为什么参数被分配到回调?
我有一个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
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
必须是一个函数,是吗?@elclarspostrl
不是一个函数它是一个类似“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一样,这样的错误消息不应该发生,但当它们发生时,它们会让你的网站看起来更专业,而不仅仅是悄无声息地崩溃。