简体   繁体   English

AJAX JQuery PHP邮件发送表单

[英]AJAX JQuery PHP mail sending form

I am working on a site which having 2 contact forms, and I use ajax jquery to send mail via php. 我正在一个有2个联系表单的网站上工作,我使用ajax jquery通过php发送邮件。

When I use single form and jQuery, it works fine. 当我使用单一形式和jQuery时,它可以正常工作。
And when I paste the jQuery code and modify as per form 2 variables, it works, but then first jQuery code is sending blank values. 当我粘贴jQuery代码并按照Form 2变量进行修改时,它可以工作,但是随后的jQuery代码首先发送了空白值。
Over all at a time, only 1 form is working for my HTML forms on different page. 一次总的来说,我的HTML表单在不同页面上仅能使用一种表单。

I appreciate your help in advance. 非常感谢您的帮助。 Jquery code 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.');
    }
  });
});

jQuery code for form 2 with the same js file: 具有相同js文件的表单2的jQuery代码:

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.');
    }
  });
});

When I use both as the above order: 1st one send empty value and second form working perfectly, if i remove 2nd jQuery then first code working fine, but second do not have code to send. 当我按上述顺序使用这两种方法时:第一个发送空值,第二个形式运行正常,如果我删除了第二个jQuery,则第一个代码可以正常工作,但是第二个没有代码要发送。

I'd do something like this: 我会做这样的事情:

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.
            }
        })
    }
});

There are a few issues here. 这里有一些问题。 First I can see you've got duplicate element IDs on the page which will produce undefined results. 首先,我可以看到页面上有重复的元素ID,这些ID会产生未定义的结果。 Second, you shouldn't be copying and pasting code but iterating through (or making generic) your code, depending on the usage. 其次,您不应该复制和粘贴代码,而要根据使用情况遍历(或使之通用)代码。 This keeps your code DRY. 这使您的代码保持干燥。 Further reading here: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself . 在此处进一步阅读: https : //en.wikipedia.org/wiki/Don%27t_repeat_yourself

If you are still having trouble, add a jsFiddle with the specific parts of the code you are having trouble with. 如果仍然遇到问题,请添加jsFiddle以及遇到问题的代码的特定部分。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM