所以,我有一个我通过JQuery / Ajax提交的表单 HTML:
<form id="emailsignup" method="post">
<p><input name="contactfirst_name" placeholder="Your First Name" type="text">
<input name="contactemail” placeholder="youremail@address.com" type="text">
<button class="btn btn-success btn-large">Sign Me Up</button>
<input name="action" value="ext_addcontact" type="hidden">
<input name="selectedgroupname" value="Website Opt-Ins" type="hidden">
<input name="groupownerid" value="[p:pid]" type="hidden">
<input name="redirect" value="path/to/success.html" type="hidden">
<input name="redirect_error" value="path/to/failure.html" type="hidden">
然后通过Javascript传递它 JAVASCRIPT
<script>
$(document).ready(function(){
$("button").click(function(){
$.post("path/to/index.php", $(".emailsignup").serialize());
});
});
</script>
好的,所以这里变得有趣。我需要改变数据序列化的格式,因为服务器正在寻找这个输出:
<击>接触%5Bfirst_name%5D =数据&安培;联系%5Bemail%5D =数据&安培;等等=数据击>
编辑:服务器正在查找联系后的单词在方括号中 (IE:我需要找到一种方法,在序列化时,输入方括号或它们的字符代码等同于将contactfirst_name转换为联系人[first_name]并将contactemail转换为联系人[email]) - 但是,我不能只重命名名称联系人[ first_name]并联系[email]。这是一个托管在营销自动化平台上的表单,[first_name]和[email]是系统变量,这意味着它们会在页面加载时转换(为什么使用相同的语法,我不知道..超越我。)
所以,我猜我在序列化后尝试使用Javascript插入方括号,但实际上并没有拼写出全名。
更改表单上的NAMES不是一个选项,因为在托管表单的平台中使用未编码的字符(即:contact [first_name],contact [email])触发变量。出于同样的原因,更改我发布的php文件不是一个选项,因为它是一个封闭的平台。
有没有办法在提交之前执行此操作?如果是这样,我在哪里将其插入到我的脚本中以及我通过哪些参数?
在这里的舒适度方面,我从W3Schools和另一个网站上找到的一个例子拼凑了这个脚本 - 除了更换class / id之外,我在Jquery和Javascript中非常新手。有占位符的地方。
答案 0 :(得分:0)
只需将序列化数据保存到本地var。然后用你需要的钥匙替换钥匙。
var serialized;
serialized = $(".emailsignup").serialize();
serialized = serialized.replace(/contact([^=]+)/, 'contact[$1]');
serialized = encodeURIComponent(serialized);
$.post("path/to/index.php", serialized);
答案 1 :(得分:0)
我假设您无法更改表单字段的名称属性(例如,name =&#34; contactfirst_name&#34; to name =&#34; contact [first_name]&#34;)。
因此,如果您必须在提交时执行此操作,则可以将序列化的帖子数据放入变量中,然后进行一些搜索/替换以将其转换为您想要的方式。
<script>
$(function () {
$("button").on('click', function () {
var formData = $('.emailsignup').serialize();
formData = formData.replace(/contactfirst_name/, 'contact%5Bfirst_name%5D');
// do more replacing for the other fields like the above...
$.post("path/to/index.php", formData, function () {
// do stuff
});
});
});
</script>
答案 2 :(得分:0)
所以我觉得自己像个白痴 - 问题是数据是以序列化方式发布的。通过将ID设置到每个字段,然后通过.setAttribute重命名名称,我能够实现我所需要的。我敢肯定这是超级笨重的,可以更简单/更优雅,但嘿,我正在学习:
function quoteRequest() {
var fName = document.getElementById("fname");
var lName = document.getElementById("lname");
var contactEmail = document.getElementById("email");
var productQty = document.getElementById("qty");
var additionalInfo = document.getElementById("additionalinfo");
var product = document.getElementById("product");
var productnum = document.getElementById("productnum");
fName.setAttribute('name', 'contact\[first_name\]');
lName.setAttribute('name', 'contact\[last_name\]');
contactEmail.setAttribute('name', 'contact\[email\]');
productQty.setAttribute('name', 'contact\[qty\]');
product.setAttribute('name', 'contact\[product\]');
productnum.setAttribute('name', 'contact\[productnum\]');
document.getElementById("quoteform").submit();
}