簡體   English   中英

一個表單,一個提交按鈕,但兩個動作

[英]One form, One submission button, but TWO actions

我有一個表單收集客戶的信息然后它

  • 將它們保存在數據庫中
  • 發幾封電子郵件
  • 將信息發送到SalesForce(SF)部門

現在,前兩個任務很簡單,但第三個任務給我帶來了麻煩。 對於SF我沒有做任何特別的事情,只需要添加他們的網址,他們將從表單中提取他們需要的所有必要信息。 對我來說,似乎為了做這些我需要表單有2個動作與一個提交按鈕相關(不能有2個表格或2個按鈕)。

所以在我的raf.php文件中我有這個表單,在提交后我必須將它們重定向到raf-submitted.php頁面,該頁面顯示成功/錯誤消息和其他必要信息。

表格 (從這里得到了想法)

 <form id="referralForm" name="referralForm" autocomplete="off" enctype="multipart/form-data" method="POST">

 <input id="saveForm" name="saveForm" class="field-submit" type="button" value="Submit" style="padding-left:20px" width="100" tabindex="23" onclick="FormSubmission(); SalesForceSubmission();" />

 </form>

JavaScript:

 $(document).ready(function()
 { 
    function SalesForceSubmission()
    {
       document.referralForm.action = "https://someAddress.salesforce.com/";
       document.referralForm.submit();          
       return true;
    }

    function FormSubmission()
    {
       document.referralForm.action = "raf-submitted.php";
       document.referralForm.submit();          
       return true;
    }
  });

raf-submitted.php文件負責表單驗證,數據庫插入和電子郵件問題。

它不起作用。 我也試過這些沒有運氣:

有人可以幫幫我嗎? 謝謝!

提交表單后,您將不再訪問該頁面。 你已經離開了。

另一種方法是通過AJAX提交第一個動作,然后將表單自然地提交到第二個目的地。 我建議使用jQuery來進行AJAX調用,因為大多數AJAX代碼已經可供您使用了。

另一個選擇是讓raf-submitted.php在收到表單數據后從服務器執行POST到salesforce服務器。 請參閱: 發布到PHP腳本中的另一個頁面

在客戶端執行此操作的唯一方法是使用AJAX。
最好在服務器端執行SF內容(如果您有訪問權限,則通過數據庫或Web服務,如果他們有一個或至少通過服務器端的CURL發送數據)。
在客戶端可能有一個提交失敗(如果第二個失敗,它似乎很糟糕 - 第一個請求不知道第二個請求沒有正確完成)。


編輯:
使用CURL發布的示例代碼:
假設您有一個帶有texthidden輸入的表單:

<form method='post' action='http://your.sf.site/your_sf_submit_page.php'>
<input type='text' name='field1'/>
<input type='hidden' name='field2'/>
</form>

您可以使用CURL提交它,如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://your.sf.site/your_sf_submit_page.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,"field1=value1&field2=value2");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);

然后你可以檢查$server_output以確保正確提交表單。

如果您可以控制raf-submitted.php頁面,我建議您對表單執行onclick操作(在本地驗證之后)使用jQuery.ajax調用您的頁面,將字段值作為查詢中的參數提供string(如果使用GET)然后只允許提交進程繼續將數據傳遞給SalesForce。

但是,如果您需要使Salesforce活動不可見,那么您可以使用type = POST以相同的方式調用它們,並在完成后將其移交給您的表單

function fun_atualizar() {
    document.orcamento.action = "atualizar_orcamento.php";
    document.orcamento.submit();
    return true;
}

function fun_evento() {
    document.orcamento.action = "Evento_orc.php";
    document.orcamento.submit();
    return true;
}

<input  type="button" value="Atualizar" style="padding-left:20px" width="100" tabindex="23" onclick="javascript:fun_atualizar();" />

<input  type="button" value="Evento" style="padding-left:20px" width="100" tabindex="23" onclick="javascript:fun_evento();" />

這看起來很像我試圖做的事情。 你已經有一個標記的答案,但我不認為這是你正在尋找的簡單答案。

假設上面的任務3可以通過POST到某個SalesForce .PHP位置來完成,前兩個任務可以在JavaScript函數中完成,我認為這將有效:

<form method="post" action="SubmitToSalesForce.php">
  <button type="submit" name="doThreeThings" onclick="doTheFirstTwoTasks();" >
</form

<script type="text/javascript">
  function doTheFirstTwoTasks() {
    // Task 1
    // Task 2
  }
</script>

它首先通過onclick=調用doTheFirstTwoTasks()函數來執行任務1和2,然后通過正常表單提交將表單提交到第三個任務的action= location。

沒什么特別的,但我不知道有多少人了解到你可以使用onclick= type=submit (with action= )在一個表單中使用單個提交按鈕進行兩個不同的操作。

在上面的代碼中,它似乎在action= onclick=之前調用onclick= (或者可能只是因為POST提交比調用JavaScript函數慢...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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