簡體   English   中英

Ajax將POST發送到兩個URL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM