如何使用jQuery ajax将函数用作数据

为了减少重复的脚本,我创建了以下插件,只要数据保持原样,它就可以工作

$.fn.myValid=函数(规则、选项){
这个。验证({
规则:规则,规则,
消息:rules.messages,
submitHandler:函数(表单){
var o=Object.assign({}{
类型:'POST',
url:null,
数据:$(表单).serializeArray(),
数据类型:“json”,
成功:功能(rsp){
//不要重新加载页面,而是动态地执行
$.unbui();
警报('已提交记录')
location.reload();
},
错误:函数(xhr){
$.unbui();
警报(xhr.responseJSON.message);
}
},选项);
//如果(o.data的类型==“函数”)o.data=o.data(形式);
$.blockUI();
$.ajax(o);
}
});
};

如果数据需要更改,我不能简单地返回类似$(form).serializeArray().concat($(“#公共输入”).serializeArray(form))的内容,因为表单尚未定义,所以我认为返回函数是可行的。但是,当启动ajax时,data是一个函数,而不是字符串、数组或普通对象,因此数据不会发送到服务器

$(“#帮助表单”).myValid(validObj.common,{url:'ajax.php','data':函数(表单){
console.log('这永远不会执行);
返回$(form).serializeArray().concat($(“#公共输入”).serializeArray(form))
}});

作为解决方法,我包括o.data=o.data(表单)(在上面的脚本中注释掉)来执行函数以返回结果,它可以根据需要工作。然而,我认为这更像是一种黑客行为,而且有一种正确的方法可以做到这一点

使用jQueryAjax将函数用作数据的正确方法是什么

对于其他属性,如urlsuccess等,解决方案是否会有所不同

您可以使用beforeSend回调来设置数据值:

发送前:功能(xhr,设置){
this.data=$(form).serialize();//或settings.data=$(form).serialize();
},

与修改url和成功回调的方式相同:

this.url='newurl';
this.success=newSuccessCallback;

类似问题

注意,这不适用于GET请求,但POST应该可以正常工作

发表评论