Javascript jQuery AJAX PUT请求数据提交不起作用

Javascript jQuery AJAX PUT请求数据提交不起作用,javascript,php,jquery,ajax,put,Javascript,Php,Jquery,Ajax,Put,我有一个PHP文件,其中包含以下内容: if ($_SERVER['REQUEST_METHOD'] === 'PUT') { echo '{ "response": "' . $_REQUEST['id'] . '" }'; } 现在我想通过jQuery对此文件进行AJAX调用: var send = { id: 10 }; $.ajax({ data: send, method: 'PUT', url: "myphpfile.php", s

我有一个PHP文件,其中包含以下内容:

if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    echo '{ "response": "' . $_REQUEST['id'] . '" }';
}
现在我想通过jQuery对此文件进行AJAX调用:

var send = {
    id: 10
};

$.ajax({
    data: send,
    method: 'PUT',
    url: "myphpfile.php",
    success: function(responseData) {
        console.log(responseData.response);
    }
});
这应该返回
10
作为响应,但是输出为空。在PHP文件中,我还尝试将id写入文本文件,结果也是空的。这意味着这里的问题不是我的PHP代码,而是JavaScript

但是,当我将AJAX url更改为
myphpfile.php?id=10
时,响应是正确的,并且
10
被记录到控制台

我已经尝试了很多方法来解决这个问题,但没有任何效果。这包括设置
contentType:'application/json;charset=utf-8'
数据类型:'json'
数据:json.stringify(send)
。我找不到更多关于这方面的论坛问题或文章,我找到的那些问题或文章都不起作用


非常感谢您的帮助。

您无法通过
$\u请求
PUT
请求访问数据。你需要一些类似的东西:

if ($_SERVER['REQUEST_METHOD'] === 'PUT') {

    parse_str(file_get_contents("php://input"),$sent_vars);
    echo json_encode(['response'=>$sent_vars['id']]); // use an array and json_encode to avoid messy string concatenation 
}
success: function(responseData) {
    var r = $.parseJSON(responseData);
    console.log(r.response);
}

另请参见

您无法通过
$\u请求
放入
请求访问数据。你需要一些类似的东西:

if ($_SERVER['REQUEST_METHOD'] === 'PUT') {

    parse_str(file_get_contents("php://input"),$sent_vars);
    echo json_encode(['response'=>$sent_vars['id']]); // use an array and json_encode to avoid messy string concatenation 
}
success: function(responseData) {
    var r = $.parseJSON(responseData);
    console.log(r.response);
}

另请参见

,这里有几个问题:

  • PUT请求处理数据解析的方式与POST不同,这就是您格式化请求的方式。非常高兴得到更多细节的回复

  • 返回json字符串,但不将其转换为js对象。您需要类似于
    $.parseJSON(…)
    的内容才能使对象正确返回。比如:

    if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    
        parse_str(file_get_contents("php://input"),$sent_vars);
        echo json_encode(['response'=>$sent_vars['id']]); // use an array and json_encode to avoid messy string concatenation 
    }
    
    success: function(responseData) {
        var r = $.parseJSON(responseData);
        console.log(r.response);
    }
    

  • 所以这里有几个问题:

  • PUT请求处理数据解析的方式与POST不同,这就是您格式化请求的方式。非常高兴得到更多细节的回复

  • 返回json字符串,但不将其转换为js对象。您需要类似于
    $.parseJSON(…)
    的内容才能使对象正确返回。比如:

    if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    
        parse_str(file_get_contents("php://input"),$sent_vars);
        echo json_encode(['response'=>$sent_vars['id']]); // use an array and json_encode to avoid messy string concatenation 
    }
    
    success: function(responseData) {
        var r = $.parseJSON(responseData);
        console.log(r.response);
    }
    

  • 您是否尝试过为ajax响应添加回调函数以查看是否有任何错误?您是否尝试过只使用console.log(responseData)?您收到的回复可能只是文本。因此,responseData.response不会显示任何值。PHP是否报告任何错误?检查您可能无法使用
    $\u REQUEST
    进行此操作是否确实不需要
    方法:“GET”
    ?但是,当我将AJAX url更改为myphpfile.php?id=10时,响应是正确的,10被记录到控制台。这可能是因为您的PHP正在寻找一个$_getvariableahh,请参阅本文。您是否尝试为ajax响应添加回调函数以查看是否存在任何错误?您是否尝试过仅使用console.log(responseData)?您收到的回复可能只是文本。因此,responseData.response不会显示任何值。PHP是否报告任何错误?检查您可能无法使用
    $\u REQUEST
    进行此操作是否确实不需要
    方法:“GET”
    ?但是,当我将AJAX url更改为myphpfile.php?id=10时,响应是正确的,10被记录到控制台。这可能是因为您的PHP正在寻找一个$_getvariableahh,请参阅本文JS对象键不必被引用,当前的实现是有效的。至于响应,只需使用
    数据类型:'json',
    ,jQuery会为您进行转换,但确实值得一提的是,这会让我大吃一惊。我不知道jQuery可以做到这一点。但我在第一点上犯了错误,我将进行编辑以反映。干杯。谢谢你的帮助,非常感谢!JS对象键不必被引用,当前实现是有效的。至于响应,只需使用
    数据类型:'json',
    ,jQuery会为您进行转换,但确实值得一提的是,这会让我大吃一惊。我不知道jQuery可以做到这一点。但我在第一点上犯了错误,我将进行编辑以反映。干杯。谢谢你的帮助,非常感谢!