POST不使用“preventDefault”或“return false”

时间:2017-09-29 00:34:45

标签: php jquery html ajax

我搜索了类似主题提供的惊人答案,但我似乎找不到能回答我问题的答案。

我正在尝试通过AJAX将数据发布到单独的PHP页面,以便在不重新加载页面的情况下发送电子邮件。但是,我可以将数据发送到POST并重新加载页面,或者表单没有POST,页面保持原样。以下示例属于后一种情况。

我不确定这是否相关,但表格包含在模态中。如有必要,我可以发布。

jQuery的:

$("#submit").click(function(e) {

        e.preventDefault();

        $.ajax({

            method: "POST",
            url: "email.php",
            data: {

                name: $("#name").val(),
                email: $("#returnEmail").val(),
                subject: $("#subject").val(),
                body: $("#body").val(),

            },
            dataType: "html",
            success: function() {

                $("#errorSuccess").html('<div class="alert alert-success" role="alert">Email Sent!</div>');

            }

        });

    });

提前致谢!

1 个答案:

答案 0 :(得分:1)

你以错误的方式追加数据。

当您将ajax中的内容发布到php(然后使用?name=value&name=value在那里阅读)时,PHP会将其作为url编码数据(id="myform")接收。

所以,这里有一些解决方案:

  1. 使用某个ID(serialize())标识您的表单元素,然后使用 method: "POST", url: "email.php", data: $("#myform").serialize(), 方法检索您需要的值。像这样:

    var form_data = {};
    
    form_data["name"] = $("#name").val(); 
    form_data["email"] = $("#email").val();
    
  2. 您可以将其附加到Javascript数组中,如下所示:

    data:form_data,
    

    然后您可以将其作为常规数据发送到Ajax参数中,

    FormData
  3. 使用var form_data = new FormData(); form_data.append("name", $("#name").val()); form_data.append("email", $("#email").val()); 对象。并附加表单中的数据 - 当您以相同的形式附加数据和文件时,建议使用FormData。

    var form = document.getElementById('myform');
    var form_data = new FormData(form);
    

    或者更简单,再次使用表单中的ID:

       data: form_data,
       processData: false,
       contentType: false
    

    对于发送,您可以在ajax参数中使用它:

    processData

    * contentType data: '?name='+$("#name").val()+'&email='+$("#email").val() 非常重要,如果它们不存在,则会抛出错误(如果我没记错的话,非法调用)

  4. 手动将其添加到字符串中(丑陋且不推荐)。但它告诉你它是如何工作的(你知道,仅仅是为了好奇)......

    {{1}}
  5. 你的ajax的成功和错误会很棒。不要忘记在PHP中设置响应,看到PHP非常适合帮助您。

    希望有所帮助:)