我正在构建一个群组邮件系统,其中VueJS和jQuery用于前端,Laravel 5用于后端。
我正在使用AJAX调用来检索基于组,代理商或所有活动用户的用户列表。然后,用户可以根据DOM中的这些结果删除地址(VueJS data
)并手动添加新地址。
表单包含一个文件,所以我不能(或根本不想根据兼容性问题)使用AJAX调用发送表单数据。问题是我需要在用户提交时发送电子邮件地址列表以及表单。
这是Javascript。最相关的部分是serializeRecipients
方法,我将每个电子邮件地址附加到隐藏的表单字段:
var vm = new Vue({
el: '#emailContainer',
data: {
recipients: [
{
name: "Joe Smith",
email: "joe@demo.com"
}
],
individualRecipients: [],
manualRecipient: null,
validation: {
email: true
}
},
methods: {
//
serializeRecipients: function() {
var recipientAddresses = [];
var individualRecipientAddresses = [];
$.each(this.recipients, function (k, recipient) {
recipientAddresses.push(recipient['email']);
});
$.each(this.individualRecipients, function(k, recipient) {
individualRecipientAddresses.push(recipient);
});
$("#recipientsInput").val(recipientAddresses);
$("#individualRecipientsInput").val(individualRecipientAddresses);
}
}
});
在表单元素上,我使用v-on="submit: serializeRecipients"
。这将生成此表单输出:someone@demo.com, someoneelse@demo.com
,然后我使用PHP的explode()
函数将其转换为数组。
这一切都有效,但我想知道是否有更好的方法来实现这一目标。任何建议将不胜感激!
答案 0 :(得分:1)
您可以将数组加入字符串,然后在服务器上解析它。
scope.$watch('node.checked', function (newValue, oldValue) {
所以:
$("#recipientsInput").val(recipientAddresses.join(','));
$("#individualRecipientsInput").val(individualRecipientAddresses.join(','));
会变成:
['me@somewhere.com', 'you@somewhereelse.com', 'him@somewhere.com']
然后在服务器上,您可以用逗号分割该字段。