带有ajax jQuery的405(不允许方法)(POST)方法

Posted

技术标签:

【中文标题】带有ajax jQuery的405(不允许方法)(POST)方法【英文标题】:405 (Method Not Allowed) (POST) method with ajax jQuery 【发布时间】:2019-03-25 13:58:39 【问题描述】:

我试图通过 ajax jQuery 将一些数据发送到带有 POST 的 php 文件,但我不断收到 POST 405 Method Not Allowed 错误,任何解决此问题的想法都将不胜感激,这是进行调用的函数

function manageData(key) 
    var name = $("#countryName");
    var abbrev = $("#countryAbbrev");
    var desc = $("#countryDesc");

    if (isNotEmpty(name) && isNotEmpty(abbrev) && isNotEmpty(desc)) 
        $.ajax(
            url: 'http://127.0.0.1:5500/ajax.php',
            method: 'POST',
            dataType: 'text',
            data: 
                key: key,
                name: name.val(),
                abbrev: abbrev.val(),
                desc: desc.val()
            ,
            success: function (response) 
                alert(response);
            
        );
    

这里是 ajax.php 文件代码

<?php
    if (isset($_POST['key'])) 

        $conn = new mysqli(host:'localhost', username:'root', passwd:'root', 
        dbname:'mysqldatamanager');
        $name = $conn->real_escape_string($_POST['name']);
        $abbrev = $conn->real_escape_string($_POST['abbrev']);
        $desc = $conn->real_escape_string($_POST['desc']);

        if($_POST['key'] == 'addNew') 
            $sql = $conn->query(query:"SELECT id FROM country WHERE 
            countryName = '$name'");
            if ($sql->num_rows > 0) 
                exit("Country already exists!");
             else 
                $conn->query("INSERT INTO country (countryName,                     
                countryAbbrev, countryDesc) VALUES ('$name', '$abbrev', 
                '$desc')");
                exit("Country has been added succesfully!");
               
        
    
?>

【问题讨论】:

如果你在本地工作?请评论您的项目文件夹位置。 PHP 不会返回 405 错误。您可能需要查看您的服务器配置以允许 POST 请求。 (另外:确保获取 405 的是 POST 请求,而不是预检 OPTIONS 请求)。 @Quentin:我如何知道 POST 是收到 405 错误还是预检 OPTIONS 请求?如果是后者,我需要做什么才能摆脱错误?我是 jQuery AJAX 的新手,面临同样的问题。请帮忙。 浏览器开发者工具的网络标签会显示动词和响应代码。 【参考方案1】:

请尝试以下代码。

function manageData(key) 
    var name = $("#countryName");
    var abbrev = $("#countryAbbrev");
    var desc = $("#countryDesc");

    if (isNotEmpty(name) && isNotEmpty(abbrev) && isNotEmpty(desc)) 
        $.ajax(
            url: 'http://localhost/ajax.php',
            type: "POST",
            data: 
                key: key,
                name: name.val(),
                abbrev: abbrev.val(),
                desc: desc.val()
            ,
            success: function (response) 
                alert(response);
            
        );
    

【讨论】:

如果他们没有发布 key 的值(并且问题中的源代码显示它们是),那么结果将跳过问题中的 PHP 块, 返回 405 错误。

以上是关于带有ajax jQuery的405(不允许方法)(POST)方法的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .ajax() 405(不允许的方法)/跨域

405 方法不允许,PATCH 不工作。 Laravel、Ajax、Jquery、引导模式

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会

WCF REST 服务返回 405:jQuery AJAX GET 不允许的方法

“405 方法不允许” - 使用 ASP.NET jQuery ajax POST 时

HTTP 错误 405.0 - 不允许使用 Jquery ajax get 的方法