Ajax 请求提交 get 而不是 post

Posted

技术标签:

【中文标题】Ajax 请求提交 get 而不是 post【英文标题】:Ajax request submitting get instead of post 【发布时间】:2016-07-11 06:46:18 【问题描述】:

我有一个表格:

<form onsubmit="return sendEmail()" id="emailForm" name="emailForm">
                   <input type="hidden" name="_cc" value="email2@gmail.com" />
                    <div class="row">
                        <p class="left">
                            <label for="name">Name*</label>
                            <input type="text" required="required" name="name" id="name" value="" />
                        </p>
                        <p class="right">
                            <label>Email*</label>
                            <input type="email" required="required" name="_replyto">
                        </p>
                    </div>

                    <div class="row">
                        <p class="left">
                            <label for="phone">Phone/Mobile</label>
                            <input type="text" required="required"  name="phone" id="phone" value="" />
                        </p>
                        <p class="right">
                            <label for="company">Organization</label>
                            <input type="text" name="company" id="company" value="" />
                        </p>
                    </div>

                    <p>
                        <label for="message" class="textarea">Queries</label>
                        <textarea class="text" name="message" id="message"></textarea>
                    </p>
                <br />
                    <div style="background-color: mediumaquamarine;margin-bottom: 2%" id="success"></div>
                    <button type="submit" class="btn btn-xl">Send</button>

</form>

和 jquery 代码使用 ajax post 提交表单:

    function sendEmail()
        $.ajax(
            url: "http://formspree.io/email1@gmail.com",
            method: "POST",
            data: $('#emailForm').serialize(),
            dataType: "json",
            success: function(result)
                $("#success").html("Message successfully sent");
            ,
            error: function (request, status, error) 
                $("#success").html("Oops! Something went wrong. Please try again");
            
        );
        return false
    

但它总是提交get请求并导致get方法不被允许的错误响应,只使用post。(405响应代码)。

不知道这里出了什么问题。

【问题讨论】:

您必须在发送 AJAX 请求之前阻止表单验证。 第一件事,检查文档:api.jquery.com/jQuery.ajax。第二件事,使用submit() 事件处理程序并停止正常的表单提交 你在尝试这个吗? &lt;form ... method="post"&gt; 【参考方案1】:

method 更改为type 如下

function sendEmail()
        $.ajax(
            url: "http://formspree.io/email1@gmail.com",
            type: "POST",
            data: $('#emailForm').serialize(),
            dataType: "json",
            success: function(result)
                $("#success").html("Message successfully sent");
            ,
            error: function (request, status, error) 
                $("#success").html("Oops! Something went wrong. Please try again");
            
        );
        return false
    

【讨论】:

这个解决方案确实有效。奇怪的是,它被否决了。也许这个版本的 jquery 不支持 'method' 关键字。需要谷歌确认!【参考方案2】:

ajaxasynchronus 只要单击按钮,就会触发您的表单提交并且ajax 方法在后台运行。这就是它触发get的原因。

GET 是默认的 http 方法。看这里: https://www.w3.org/TR/html401/interact/forms.html#h-17.3 如果您查看控制台,它也应该在那之后触发(发布)。

试试这个:

<form id="emailForm" name="emailForm">

在js中:

$('#emailForm').submit(function (e)
    // stop the default form submit behaviour
    e.preventDefault();
    $.ajax(
        url: "http://formspree.io/email1@gmail.com",
        method: "POST",
        data: $('#emailForm').serialize(),
        dataType: "json",
        success: function(result)
            $("#success").html("Message successfully sent");
        ,
        error: function (request, status, error) 
            $("#success").html("Oops! Something went wrong. Please try again");
        
    );
    return false
);

【讨论】:

【参考方案3】:

您遇到的错误可能与您的服务器或服务器代码中的某些内容有关。

尝试将请求标头和参数复制到 json poster 并尝试从那里发送请求,如果您仍然收到错误,这意味着它在您的服务器中,或者您的请求可能缺少某些标头。

在您成功发送有效的 post 请求后,将其转换为 ajax 请求会更容易。

【讨论】:

以上是关于Ajax 请求提交 get 而不是 post的主要内容,如果未能解决你的问题,请参考以下文章

通过html表单方式提交数据(可以指定get和post)和ajax方式请求的原理是一样的吗?

前端ajax中运用post请求和get请求之于session验证

ajax

ajax

jquery中使用ajax发送post请求变成get请求

ajax 入门