jQuery AJAX PUT有空的QUERY_STRING和REQUEST PHP变量


jQuery AJAX PUT has empty QUERY_STRING and REQUEST PHP variables

我正在为我开发的现有REST接口编写一个web前端。到目前为止,我所有的POST和GET请求都运行良好,但当我开始添加PUT请求时,现在我遇到了麻烦。

我把它归结为一个非常简单的测试用例,有两个文件:

我的javascript AJAX:

$.ajax({
    url: "putTest.php",
    type: 'PUT',
    dataType: 'application/json',
    data: { testVar: "test" },
    contentType: 'application/json',
    success: function( data ) {
    },
    failure: function( data ) {
    }
});

我的PHP页面"putTest.PHP":

<?php
    var_dump($_SERVER);
?>

我希望,就像在GET或POST中一样,我的QUERY_STRING服务器变量将包括testVar,这是我传递给它的数据。然而,这不是真的,看看响应:

["REQUEST_METHOD"]=> string(3) "PUT"
["QUERY_STRING"]=> string(0) ""
["REQUEST_URI"]=>  string(25) "/test/putTest.php"

让我困惑的是,我使用了一个Firefox插件(HttpRequester),并发送了完全相同的参数和设置,结果得到了完美的响应。

为什么在使用jQueryAJAX时不会出现这些参数?

谢谢!

默认情况下php不支持DELETE/PUT。。。。

<?php
function getRequestParams() {
    if($_SERVER['REQUEST_METHOD'] === "GET" || $_SERVER['REQUEST_METHOD'] === "POST") {
        return $_REQUEST;
    } else {
        // For urlencode
        parse_str(file_get_contents("php://input"), $var);
        // or for json content
        // $var = json_decode(file_get_contents("php://input"));
        return $var;
    }
}
$params = getRequestParams(); 

$params会有你提交的params

您的解析方式将取决于您提交的dataType。