你知道为什么我收到“I‘m Get”wp-admin/admin-ajax.php 401(未经授权)“

时间:2020-06-02 作者:djack109

我在Windows 10上本地运行,我是我计算机的完全管理员。有什么想法吗?

基本上,我正在尝试从表单发送电子邮件。我刚开始编写代码,想测试ajax是否被调用。我已配置SMTP。

<div class="chat-form">
    <form class="form-container" id="chat-form">        
        <input type="hidden" name="nonce" value="<?php echo wp_create_nonce( ) ?>" />
        <div class="form-group row">
            <div class="col">
                <input type="email" class="form-control" placeholder="Your email" id="email" name="email" required />
            </div>
        </div>
        <div class="form-group row">
            <div class="col">
                <textarea class="form-control" placeholder="Type your message" id="message" name="msg" rows =10 required></textarea>
            </div>
        </div>
        <div class="form-group row">
            <div class="col">
                <button type="submit" class="btn btn-sm btn-primary btn-block submit" name="submit">Send</button>
            </div>
        </div>
    </form>
    <div class="form-group row">
        <div class="col text-right">
            <button type="button" name="message" class="btn btn-sm btn-success chat" title="Open message window"><i class="far fa-comment"></i></button>
        </div>
    </div>
</div>

<script>
(function($) {

    $(".submit").on("click", function (e) {
        e.preventDefault();
        //e.stopPropagation();        

        let endpoint = "<?php echo admin_url( "admin-ajax.php" )?>";

        let form = $("#chat-form").serialize();

        let formData = new FormData;

        formData.append("action", "enquiry");
        formData.append("enquiry", form);
        //alert (url);

        $.ajax( endpoint, {

            type: "POST",
            data: formData,
            processData: false,
            contentType: false,

            success: function(response) {

                alert(response.data)
            },
            error: function(err) {

            }
        });
    });

})(jQuery)
</script>
在函数中。php我有这个

add_action("wp_ajax_enquiry", "send_message_form");
add_action("wp_ajax_nopriv_enquiry", "send_message_form");

function send_message_form() {

    wp_send_json_success("Yes it works");
}
就这么多了

1 个回复
SO网友:djack109

它正在工作,我通过挖掘管理ajax来跟踪它。php查看401/400的响应情况。我的修复基本上是action 参数附加到formData

    formData.append("enquiry", form);
    formData.append("action", "enquiry");
我通常不使用formData发布内容,.serialize() 这些年来对我来说已经足够了。由于我大部分时间都在使用JSON编写C#和PHP,而没有WordPress的开销,我只是假设同样的事情,没有考虑到您需要连接WordPress才能使一切正常运行。

但我确实模糊地回忆起了一段时间前集市上关于添加到formData的项目顺序的一些事情(非WordPress),或者我可能只是在做梦。

@汤姆:我仍然有兴趣了解更多关于REST解决方案的信息。