【问题标题】:jQuery AJAX PUT request data submission not workingjQuery AJAX PUT 请求数据提交不起作用
【发布时间】:2016-09-06 14:11:24
【问题描述】:

我有一个 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'dataType: 'json'data: JSON.stringify(send)。我找不到更多关于此的论坛问题或文章,而且我发现的那些没有用。

感谢任何帮助。

【问题讨论】:

  • 有没有尝试添加ajax响应的回调函数,看看有没有错误?
  • 你试过 console.log(responseData) 吗?您收到的响应可能只是文本。因此,responseData.response 不会显示任何值。
  • PHP 是否报告任何错误?检查php.net/manual/en/reserved.variables.request.php,您可能无法为此使用$_REQUEST
  • 您确定不要method: 'GET'但是,当我将 AJAX url 更改为 myphpfile.php?id=10 时,响应是正确的,并且 10 会记录到控制台。这可能是因为您的 PHP 正在寻找 $_GET 变量

标签: javascript php jquery ajax put


【解决方案1】:

您无法通过$_REQUEST 访问来自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 
}

另见Accessing Incoming PUT Data from PHP

【讨论】:

    【解决方案2】:

    所以这里有几个问题:

    1. PUT 请求处理数据的方式与 POST 不同,这是您格式化请求的方式。 So Delighted 回复了解更多详情。

    2. 您返回一个 json 字符串,但不将其转换为 js 对象。您需要 $.parseJSON(...) 之类的东西才能使对象正确返回。所以像:

      success: function(responseData) {
          var r = $.parseJSON(responseData);
          console.log(r.response);
      }
      

    【讨论】:

    • JS 对象键不必引用,当前实现有效。至于响应,只需使用dataType: 'json', 和 jQuery 为您进行转换,但确实值得注意
    • 好吧,让我失望。我不知道 jQuery 可以做到这一点。我在第一点上的错误,我会编辑以反映。干杯。
    • 感谢您的帮助,非常感谢!
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多