【问题标题】:AJAX JQuery PHP mail sending formAJAX JQuery PHP 邮件发送表单
【发布时间】:2017-05-02 20:08:06
【问题描述】:

我正在一个有 2 个联系表格的网站上工作,我使用 ajax jquery 通过 php 发送邮件。

当我使用单一表单和 jQuery 时,它工作正常。
当我粘贴 jQuery 代码并根据表单 2 变量进行修改时,它可以工作,但是首先 jQuery 代码正在发送空白值。
一次,只有一个表单适用于我在不同页面上的 HTML 表单。

提前感谢您的帮助。 jQuery代码

var form=$('#contactform_forms');
var formMessages=$('#message');

$(form).submit(function(e){
  $('#submit_btns')
    .after('<img src="images/AjaxLoader.gif" class="loader" />')
    .attr('disabled','disabled');
  e.preventDefault();
  var formData=$(form).serialize();

  $.ajax({
    type:'POST',
    url:'contact.php',
    data:formData
  })
    .done(function(response){
    $(formMessages).removeClass('error');
    $(formMessages).addClass('success');
    $(formMessages).text('Thanks! Message has been sent.');
    $(formMessages).fadeOut(10000);
    $('#contactform_forms img.loader').fadeOut('slow',function(){$(this).remove()});
    $('#submit_btns').removeAttr('disabled');
    $('#contact_name').val('');
    $('#contact_email').val('');
    $('#contact_phone').val('');
    $('#contact_message').val('');

  }).fail(function(data){
    $(formMessages).removeClass('success');
    $(formMessages).addClass('error');
    if(data.responseText!==''){
      $(formMessages).text(data.responseText);
    }else{
      $(formMessages).text('Oops! An error occured.');
    }
  });
});

表单2的jQuery代码与相同的js文件:

var form=$('#wholesalers_forms');
var formMessages=$('#message');

$(form).submit(function(e){
  $('#submit_btns1')
    .after('<img src="images/AjaxLoader.gif" class="loader" />')
    .attr('disabled','disabled');
  e.preventDefault();
  var formData=$(form).serialize();

  $.ajax({
    type:'POST',
    url:'wholesalers.php',
    data:formData
  })
    .done(function(response){
    $(formMessages).removeClass('error');
    $(formMessages).addClass('success');
    $(formMessages).text('Thanks! Message has been sent.');
    $(formMessages).fadeOut(10000);
    $('#wholesalers_forms img.loader').fadeOut('slow',function(){$(this).remove()});
    $('#submit_btns1').removeAttr('disabled');
    $('#hs_name').val('');
    $('#hs_email').val('');
    $('#hs_company').val('');
    $('#hs_vat').val('');
    $('#hs_address').val('');
    $('#hs_postcode').val('');
    $('#hs_city').val('');
    $('#hs_phone').val('');
    $('#hs_message').val('');

  }).fail(function(data){
    $(formMessages).removeClass('success');
    $(formMessages).addClass('error');
    if(data.responseText!==''){
      $(formMessages).text(data.responseText);
    }else{
      $(formMessages).text('Oops! An error occured.');
    }
  });
});

当我按上述顺序使用两者时:第一个发送空值,第二个表单工作正常,如果我删除第二个 jQuery,那么第一个代码工作正常,但第二个没有代码发送。

【问题讨论】:

  • 能否请您粘贴一般代码,包括带有表单和相关js的HTML?
  • 你不应该只是复制粘贴 jQuery 代码第二次。您需要重写该函数,使其适用于两种表单,然后根据单击的提交按钮适当地调用它。
  • 是的,克里斯,我重写了,我已经发布了两个代码,但它对我不起作用。
  • 我认为这两个脚本在同一个页面上。因此,2 var.submit() 处理程序被覆盖。 (符合问题描述...)

标签: javascript php jquery ajax email


【解决方案1】:

这里有几个问题。首先,我可以看到您在页面上有重复的元素 ID,这将产生未定义的结果。其次,您不应该复制和粘贴代码,而是根据使用情况迭代(或制作通用)代码。这使您的代码保持干燥。进一步阅读:https://en.wikipedia.org/wiki/Don%27t_repeat_yourself

如果您仍然遇到问题,请添加一个 jsFiddle,其中包含您遇到问题的代码的特定部分。

【讨论】:

  • 由于 jQuery 知识有限,我无法找到重复的元素 ID。
  • 这与 HTML 标准和 DOM 有关,而不是专门针对 jQuery。您还需要发布您的示例 HTML,最好是在一些可编辑的容器(jsFiddle、js bin 等)中。具体来说,您似乎拥有多个具有相同 ID 的元素 message
  • 现在它在两个代码中替换所有(重复或同名变量)后工作。感谢您的帮助。
【解决方案2】:

我会这样做:

function getFormData(form_id) { 
    var form_data = {};
    $.each($("#" + form_id).serializeArray(), function(i, obj) {
        if (form_data[obj.name] == undefined) {
            form_data[obj.name] = obj.value;
        } else if (typeof form_data[obj.name] == Array) {
            form_data[obj.name].push(obj.value);
        } else {
            form_data[obj.name] = [form_data[obj.name], obj.value];
        }
    });
    return form_data;
}

function validate(form_id) {
    var error = false;

    //run some validation, which alters display and sets error to true on failure.

    return error;
}

$(document).on("submit", "form", function(event) {
    var form_id = $(this).attr("id");
    if (validate(form_id)) { //If error is found.
        event.preventDefault();
    } else { //Else the form is good.
        var form_data = getFormData(form_id),
            url = (form_id == "contactform_forms") ? "contact.php" : "wholsalers.php";
        $.ajax({
            type: "post",
            url: url,
            data: form_data,
            success: function(data) {
                //Display a confirmation message.
            }
        })
    }
});

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多