【问题标题】:how to save data before submitting to 3rd party server?如何在提交到第三方服务器之前保存数据?
【发布时间】:2011-12-24 23:17:31
【问题描述】:

我一直在阅读大量的问答,这些 stackoverflow 帖子似乎与我正在尝试做的事情最相关: 1)How we can save data on two servers using one sumit form? 2)How to call server side action method just before submitting form to 3rd party url?

基本上,我正在使用 Aweber 自动回复服务,我遇到了一些技术问题,即使我在我的分析软件上看到人们正在用电子邮件填写表格并点击提交按钮。

所以,我希望我可以先在 TXT 文件中捕获服务器上的表单数据,然后再将表单数据提交给 Aweber。

(根据我的研究,我需要 ajax、jquery 来实现)

根据不同的帖子和教程,我想出了以下内容,但不幸的是仍然无法正常工作......

如果可能,请告诉我如何修复此代码。非常感谢!!!

使用 jquery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript">

$(document).ready(function() {

    //if submit button is clicked
    $('#submit').submit(function () {       

        //Get the data from all the fields
        var email = $('input[name=email]');
        var custom_sub1 = $('input[name=custom sub1]');
        var custom_sub2 = $('input[name=custom sub2]');
        var custom_sub3 = $('input[name=custom sub3]');

        //organize the data properly
        var data = 'email=' + email.val() + '&custom_sub1=' + custom_sub1.val() + '&custom_sub2='
        + custom_sub2.val() + '&custom_sub3='  + custom_sub3.val();

        //start the ajax
        $.ajax({
            //this is the php file that processes the data and send mail
            url: "http://mydomain.com/form_plus_email.php",

            //method
            type: 'POST',

            //pass the data        
            data: data,    

            //Do not cache the page
            cache: false,

        success: function() {
            }
        });



        //cancel the submit button default behaviours
        return false;
    });
}); 


</script>
</head>

以上,不知道是不是“return false;”导致问题

有形体:

<form method="post" action="http://www.aweber.com/scripts/addlead.pl">

<input type="text" name="email" value="Enter email" id="email">

<input value="xxxxxxxxxxxx" name="meta_web_form_id" type="hidden">
<input value="" name="meta_split_id" type="hidden">
<input value="xxxxxxxxxxxxx" name="listname" type="hidden">
<input value="http://domain.com/thankyoupage" name="redirect" type="hidden">
<input value="http://domain.com/thankyoupage" name="meta_redirect_onlist" type="hidden">
<input value="xxxxxxxxxxxxx" name="meta_adtracking" type="hidden">
<input value="1" name="meta_message" type="hidden">
<input value="email" name="meta_required" type="hidden">
<input value="1" name="meta_forward_vars" type="hidden">
<input value="" name="meta_tooltip" type="hidden">
<script type="text/javascript">
{
document.write('<input type="hidden" name="custom sub1" value="'+sub1+'">')
document.write('<input type="hidden" name="custom sub2" value="'+sub2+'">')
document.write('<input type="hidden" name="custom sub3" value="'+sub3+'">')
}
</script>

<input type="image" value="Submit Button" name="submit" src="image.png" id="submit" class="button1">
        </form>



</body>

对于 Aweber,重要的是所有列出的隐藏和未隐藏字段都传递给 action="http://www.aweber.com/scripts/addlead.pl"。

但是,对于我自己来说,因为我只对 4 个字段感兴趣,所以我已经在 head 标签的 jquery 部分中指定了我需要的所有内容。

我不知道为什么代码不起作用...所以,我如何确保在将表单数据提交给第 3 方之前,它会先使用 ajax 保存到我的服务器网址?现在……

<form method="post" action="http://www.aweber.com/scripts/addlead.pl">

正在执行并正常工作......但据我所知,ajax 根本没有保存数据

非常感谢!

【问题讨论】:

  • 不能发两次吗?您有一个执行一个帖子的`$.ajax` 调用,为什么不在同一个点击事件中在另一个执行另一个帖子的下方添加第二个`$.ajax`?只要确保你的成功函数在两者都完成之前不会重定向。
  • @Nanne:感谢您的提示,我确实尝试使用设置为“#”的表单操作进行 2 次 ajax 调用。但是,即使这样,也没有执行 ajax 调用...就像当前代码一样,action="aweber.com/scripts/addlead.pl" 会执行,但由于某种原因,ajax 帖子似乎不起作用...

标签: php javascript jquery ajax forms


【解决方案1】:

首先更改您使用的提交按钮上的事件。所以不是

$('#submit').submit(function () {

使用

$('#submit').click(function () {

因为提交事件是针对表单的,而不是针对按钮的。一旦你改变了它,那么正如 Ramengo 所说,使用你的成功函数提交表单。

最好使用 Aweber API,它允许您从 2011 年 11 月起将用户添加到帐户。

【讨论】:

    【解决方案2】:

    我马上就要出门了,但我只想补充一点,有时当您遇到奇怪的 Ajax 问题时,请尝试使用 GET 而不是 POST 进行 ajax 调用。这已经解决了许多问题我之前,而且,由于您使用的是 ajax 并且用户看不到 url,因此差异非常微妙且无关紧要。

    如果有帮助,请告诉我!

    【讨论】:

    • 感谢您的帮助!问题是......我不知道为什么没有执行 ajax 调用。 - 是不是因为我写错了? - 是因为我使用了不正确的语法吗? - 是因为我使用了错误的功能吗?解决 ajax 问题的最佳方法是什么...
    【解决方案3】:

    你在做什么:

        success: function() {
            }
        });
    

    这将在成功加载 Ajax 内容时触发,因此您只需要:

        success: function() {
               $('#formid').submit();
            }
        });
    

    只需确保您为表单提供了一个可以轻松引用的 ID。如果您没有为“成功”设置行为,那么您的表单将永远不会提交,因为您正在使用

    停止提交行为
    return false;
    

    其次,您是否考虑过将表单提交到服务器上的中间脚本,该脚本写入文件然后重定向到目标第 3 方脚本?

    如果您不熟悉 Ajax,您将不必弄清楚如何使用它。

    【讨论】:

    • 他后来通过email.val()获取价值。
    • 感谢您的回复拉门戈。我会试试你的建议!我无法将表单提交到服务器上的中间脚本的原因是因为所有潜在客户都将来自我的服务器 ip ......这将被 Aweber 皱眉
    • @HarryPotter:忽略这一点,因为您将在下一行代码中获取电子邮件字段等的值:var data = 'email=' + email.val() + '&amp;custom_sub1=' + custom_sub1.val() + '&amp;custom_sub2=' + custom_sub2.val() + '&amp;custom_sub3=' + custom_sub3.val();
    • @HarryPotter 如果您使用重定向的中间脚本,那么引用 URL 肯定与您从原始表单中执行的操作相同。只要您不使用 Curl 或类似方法提交服务器端,而是使用完整的 URL 参数进行重定向,这应该模拟表单提交。
    • @Ramengo,感谢您的回复!我不知道这个中间脚本会是什么样子......有没有我可以参考并尝试弄清楚的示例脚本?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    相关资源
    最近更新 更多