一个表单,一个提交按钮,但有两个操作
Posted
技术标签:
【中文标题】一个表单,一个提交按钮,但有两个操作【英文标题】:One form, One submission button, but TWO actions 【发布时间】:2013-01-14 21:05:11 【问题描述】:我有一个收集客户信息的表格
将它们保存在数据库中 发送几封电子邮件 将信息发送给 SalesForce (SF) 部门现在,前两个两个任务很容易,但第三个给我带来了麻烦。对于 SF,我没有做任何特别的事情,只需添加他们的 url,他们就会从表单中提取他们需要的所有必要信息。在我看来,为了做到这些,我需要表单有 2 个与一个提交按钮相关联的操作(不能有 2 个表单或 2 个按钮)。
所以在我的raf.php
文件中我有这个表单,提交后我必须将它们重定向到显示成功/错误消息和其他必要信息的raf-submitted.php
页面。
表格(从here得到想法)
<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" 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
文件负责表单验证、数据库插入和电子邮件问题。
它不工作。我也尝试了这些,但没有运气:
Two onClick actions one button Two Form Action that opens URL in a new window in One Submit button?有人可以帮帮我吗?谢谢!
【问题讨论】:
【参考方案1】:提交表单后,您将不再位于该页面上。你已经离开了。
您可以这样做的另一种方法是通过 AJAX 提交第一个操作,然后自然地将表单提交到第二个目的地。我建议使用 jQuery 来进行 AJAX 调用,因为大部分 AJAX 代码已经在那里供你使用。
另一种选择是让raf-submitted.php
在收到表单数据后从您的服务器向 Salesforce 服务器执行 POST。见:Post to another page within a PHP script
【讨论】:
很遗憾,我对 AJAX 不太熟悉...让我看看您的建议 谢谢。让我完成教程:) 当你说“通过 AJAX 提交第一个操作,然后自然地将表单提交到第二个目的地”时,你的意思是我为 SF 做了这样的事情:@987654323 @ 和 raf 提交的页面<form id="referralForm" ..... method="POST" action="raf-submitted.php">
?
是的。首先运行 AJAX 调用,然后在 ONSUCCESS 回调中调用 do $('#referralForm').submit()。如果您不通过 onsuccess 执行此操作,您可能会在第一个请求完成之前取消它。
这个想法+1。不幸的是,我不得不放弃这个问题并开始做其他事情。当我再次开始工作时,我会再试一次。感谢您的时间和帮助!【参考方案2】:
在客户端执行此操作的唯一方法是使用 AJAX。 最好在服务器端做 SF 的事情(如果你有访问权限,则通过 DB 或 Web 服务,如果他们有一个或至少在服务器端通过 CURL 发送数据)。 可能有一个提交在客户端失败(如果第二个失败似乎很糟糕 - 第一个请求不知道第二个没有正确完成)。
编辑:
使用 CURL 发布的示例代码:
假设您有一个带有text
和hidden
输入的表单:
<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
以确保该表单已正确提交。
【讨论】:
不,我无权访问该数据库。看起来没有比使用 AJAX 的方法了……我现在正在努力学习它:) 还是谢谢你。 @Walahh: 所以,你可以在服务器端创建你的 SF 请求并在服务器端使用 CURL 提交 对于 SF,他们给了我一个 url 和一个隐藏的输入字段以放入表单中。你能告诉我一些你确切建议的示例/示例代码吗?泰! +1 用例子来解释它。不幸的是,我不得不放弃这个问题并开始做其他事情。当我再次开始工作时,我会试一试。感谢您的宝贵时间和帮助【参考方案3】:如果您可以控制 raf-submitted.php 页面,我建议您对表单进行 onclick 操作,该表单(在本地验证后)使用 jQuery.ajax 调用您的页面,提供字段值作为参数在查询字符串中(如果使用 GET)然后简单地允许提交过程继续将数据传递给 SalesForce。
但是,如果您需要使 Salesforce 活动不可见,那么您可以使用 type=POST 以相同的方式调用它们,并在完成后移交给您的表单
【讨论】:
【参考方案4】: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" tabindex="23" onclick="javascript:fun_atualizar();" />
<input type="button" value="Evento" style="padding-left:20px" tabindex="23" onclick="javascript:fun_evento();" />
【讨论】:
【参考方案5】:这看起来很像我试图做的事情。您已经标记了一个答案,但我认为这不是您要寻找的简单答案。
假设上面的任务 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=
位置以完成第三个任务。
没什么特别的,但我不知道有多少人知道你可以使用onclick=
和 type=submit
(和action=
)在一个表单中执行两个不同的操作一个提交按钮。
在上面的代码中,似乎在action=
之前调用了onclick=
(或者可能只是因为POST提交比调用JavaScript函数慢......)
【讨论】:
以上是关于一个表单,一个提交按钮,但有两个操作的主要内容,如果未能解决你的问题,请参考以下文章