2014-09-26 62 views
0

所以,我有我通過JQuery/AJAX HTML提交表單:可能在JQuery中更改名稱/序列化​​輸出?

<form id="emailsignup" method="post"> 
<p><input name="contactfirst_name" placeholder="Your First Name" type="text"> 
<input name="contactemail」 placeholder="[email protected]" 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> 

OK,所以這裏的地方變得樂趣。我需要改變其中的數據序列化格式的方式,因爲服務器正在尋找 這樣的輸出:

聯繫人%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文件不是一個選項,因爲它是一個封閉的平臺。

有任何方式,比如說,beforesubmit做到這一點?如果是這樣,我在哪裏插入到我的腳本,我通過什麼參數?

在這裏的舒適度方面,我從W3School和另一個網站上找到的例子拼湊了這個腳本 - 我在Jquery和Javascript中都是新手,除了替換帶有佔位符的classes/id之外。

回答

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(); 
} 
0

只是將serealized數據保存到本地var。然後用您需要的鑰匙替換鑰匙。

var serialized; 

serialized = $(".emailsignup").serialize(); 
serialized = serialized.replace(/contact([^=]+)/, 'contact[$1]'); 
serialized = encodeURIComponent(serialized); 

$.post("path/to/index.php", serialized); 
0

我想你不能改變表單字段的名稱屬性(例如名稱=「contactfirst_name」來命名=「接觸[FIRST_NAME]」)。

所以,如果你有這樣做的提交,你可以把序列化後的數據到一個變量,然後做一些搜索/替換它轉換成你想要的方式。

<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> 
+0

你是對的,不正確。我可以編輯名稱屬性 - 但是,我實際上不能使用文字名稱(聯繫[first_name],聯繫[email]) - 任何封裝在方括號中的東西,系統,看起來像一個變量,所以在加載時會替換文本與系統中編碼的變量。顯然它不喜歡我的URI編碼字符。我正在研究formData.replace函數,以查看是否有其他方式可以重新插入方括號vs/contactfirst_name /,'contact [first_name]',因爲這會在頁面加載時轉換爲'contactValued Customer 」。 – user3366357 2014-09-26 20:51:10

+0

行 - 所以我採用了這種格式,你給了我,並能夠成功地使用formData.replace函數添加回我的方括號中,並且它正確顯示(hooray)在頁面加載。然而,它仍然是失敗的,我沒有辦法從服務器獲取特定錯誤,以查看我出錯的地方。執行formData.replaces之後是否可以序列化?我不明白爲什麼它會有所作爲...] – user3366357 2014-09-26 21:28:48