表单提交问题 - 信息到数据库并重定向到感谢页面

时间:2014-09-21 04:08:47

标签: javascript jquery html

表单提交问题 - 需要将信息发送到数据库并需要重定向到感谢页面

以下是代码和小提琴链接。谢谢。

我正在尝试重定向到 - 谢谢你页面

相反,我被重定向到 - “action” - URL

使用现有代码,不存在向数据库发送信息的问题。它工作正常,只是它没有将我重定向到感谢页面。

HTML:

 <form name="MailingList" method="post" Id="formId" action="URL" onsubmit="return validate_form(this);">
 <input type="email" name="emailaddress" placeholder="Email Address" maxlength="100" size="28">
<br>
<input type="submit" name="Submit" value="Submit" width="260px">
</form>

var frmvalidator = new Validator("MailingList");

frmvalidator.addValidation("Email", "maxlen=50");
frmvalidator.addValidation("Email", "req");
frmvalidator.addValidation("Email", "email");

<script>
jQuery(function () {
jQuery('#subscribe').click(function () {
    jQuery.ajax({
        type: 'POST',
        url: 'URL',
        data: 'emailaddress=' + jQuery('input[name="emailaddress"]').val(),
        success: function (data) {
            if (jQuery(data).find('.subscribe_valid').length) {
                location.href = 'Thank you page';
            }
        },
        error: function () {
            alert('error handling here');
        }
    });
 });
}); 
</script>

2 个答案:

答案 0 :(得分:0)

<强>先决条件

  1. 表单和脚本需要与Ajax目标生成相同的源 - 如果没有,则无需进一步阅读 - 例如,您永远不能从jsfiddle测试teabeyond。

  2. 必须在脚本

  3. 之前加载jQuery
  4. 验证必须在jQuery加载事件处理程序

  5. 然后你需要  使用

    取消表单提交
    ....submit(function(e) {
       e.preventDefault();
    

    以下是尝试修复原始问题的代码。我期待一个序列化的形式而不是ajax中的上下文

    注意 jsFiddle不能Ajax到jsFiddle本身以外的其他网站,所以代码不适用于jsFiddle

    FIDDLE

    function validate_form(theForm) {
        if (theForm.emailaddress.value=="") {
            alert("Please enter email");
            return false;
        }
        return true;
    }
    $(function () {
      $('#formId').submit(function (e) {
        e.preventDefault(); // cancel the form
        if (validate_form(this)) {
          // the form's action MUST point to a page on the same origin as the form
          $.post(this.action, $(this).serialize(),
            function () {
              window.location.replace("https://www.othersite.com/Articles.asp?ID=252"); 
          });
        }
      });
    });
    

    而不是$(this).serialize(),你可以拥有

    {"emailaddress2",this.emailaddress2.value}
    

答案 1 :(得分:-2)

replace没有做任何事情,因为您没有为其提供第二个参数。替换方法是这样的:

String.replace('texttolookfor', 'replacementtext');

String replace

如果您想重定向,那么您需要为replace方法提供您想去的网址:

window.location.replace("https://www.teabeyond.com/Articles.asp?ID=252", "http://www.teabeyond.com/MailingList_subscribe.asp");

您可能希望使用控制台验证您的地址以及不是。

另外,根据@mplungjan,您需要阻止默认的提交操作。