[英]Ajax send POST to two URLs
在我的網站上,我想將POST數據發送到兩個不同的URL,並稍微修改每個URL的數據。 一個是軟輸液,另一個是我的另一個網站上的API。
注意#1:我將使用示例文本替換我的個人API的URL。
注意2:是否必須設置內容類型,或者在發送表單數據之前是否缺少其他標頭/信息? 如果是這樣,為什么要在台式機上完美運行呢? 這段代碼曾經全部用在jQuery中,但效果不佳,所以我試圖用Vanilla JS重寫整個代碼,只是為了擺脫依賴問題的想法。
注意#3: No 'Access-Control-Allow-Origin' header is present on the requested resource.
^這與Infusion Soft和我的個人API有關。 我假設即使沒有在Infusion Soft上設置它也不是問題,尤其是考慮到一切都可以在桌面上完美運行的事實。
注意#4:每個選擇器和所有選擇器都匹配一個元素。 再也沒有錯別字,在台式機上運行時可以100%使用
Windows 10 Home
Chrome Version 61.0.3163.100 (Official Build) (64-bit)
注意#5:表格上的操作轉到Infusion Soft。 我阻止了默認事件的發生,因此我可以處理數據,然后將其發送到我們的數據庫。 完成之后,我再次使用數據,然后讓Infusion Soft運行action屬性-您可以在代碼中看到所有內容。
我的代碼如下:
<script>
var form = document.getElementById('RequestADemo');
document.getElementById('submitButton').addEventListener('click', processData);
function processData(e){
e.preventDefault();
var phone = document.getElementById('inf_field_Phone1').value;
var formData = new FormData(form);
formData.append('action', 'insertLead');
formData.append('inf_field_Phone', phone);
var oReq = new XMLHttpRequest();
oReq.open('POST', 'http://example.com/api.php', true);
oReq.send(formData);
var fullName = document.getElementById('inf_field_FirstName').value;
var fullNameSplitted = fullName.split(' ');
var firstName = fullNameSplitted[0];
if (fullNameSplitted.length > 1) {
var lastName = fullNameSplitted[1];
}
var formData2 = new FormData(form);
formData2.delete('inf_field_FirstName');
formData2.append('inf_field_FirstName', firstName);
formData2.append('inf_field_LastName', lastName);
var oReq2 = new XMLHttpRequest();
oReq2.open('POST', form.getAttribute('action'), true);
oReq2.send(formData2);
form.reset();
alert('Thanks! We will contact you shortly. Check your email for a confirmation.');
}
</script>
該代碼在台式機上運行完美,並且可以同時提交給我的個人API和Infusion Soft。 在我們的API中,我們負責名字和姓氏的分割,並將它們插入數據庫中的單獨字段中。 但是,對於Infusion Soft,由於無法控制其API,因此需要在發送數據之前執行此操作。 所有這些都按計划在桌面上運行。
在Safari的iPhone7上,此代碼按計划插入到我的個人數據庫中,但並未插入到Infusion Soft中。 我用console.log();
測試了一些東西console.log();
並發現
var FormData2 = new FormData(form);
是移動設備上出現問題的那條線。
這條線之前的一切在移動設備上都運行完美。
有任何想法嗎? 我真的很感激!
**更新:**
這是我發送給Infusion Soft的第二個請求的新變量和代碼:
var email = document.getElementById('inf_field_Email').value;
var company = document.getElementById('inf_field_Company').value;
var phone = document.getElementById('inf_field_Phone1').value;
var fullName = document.getElementById('inf_field_FirstName').value;
var fullNameSplitted = fullName.split(' ');
var firstName = fullNameSplitted[0];
if (fullNameSplitted.length > 1) {
var lastName = fullNameSplitted[1];
}
var formData2 = new FormData();
formData2.append('inf_field_FirstName', firstName);
formData2.append('inf_field_LastName', lastName);
formData2.append('inf_field_Email', email);
formData2.append('inf_field_Company', company);
formData2.append('inf_field_Phone1', phone);
var oReq2 = new XMLHttpRequest();
oReq2.open('POST', form.getAttribute('action'), true);
oReq2.send(formData2);
但是,這不適用於台式機或移動設備! :(但是最后的警報確認正在通過。
解決了
正如@Barmar在評論中提到的那樣,我必須創建一個空的FormData並手動附加所有值。 我這樣做了,起初它沒有用。 我想通了,是我是我追加想送輸液軟的所有值,但解決的辦法是把所有的隱藏字段輸液軟讓你在無樣式的HTML表單和它們的值也是如此。
我只需要制作這些附加表單,這些附加表單就是其他3個隱藏字段:
formData2.append('inf_form_xid', xid);
formData2.append('inf_form_name', isFormName);
formData2.append('infusionsoft_version', isVersion);
請注意,在此代碼塊之前,我已經將變量設置為其值。 Infusion Soft除非接受這些值,否則不得接受數據,這是完全有意義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.