jQuery AJAX PUT 请求数据提交不工作
jQuery AJAX PUT request data submission not working
我有一个 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);
}
});
这应该 return 10
作为响应,但是输出为空。在 PHP 文件中,我还尝试将 id 写入文本文件,结果也是空的。这意味着我的 PHP 代码不是这里的问题,而是 JavaScript.
然而,当我将 AJAX url 更改为 myphpfile.php?id=10
时,响应是正确的并且 10
被记录到控制台。
我尝试了很多方法来解决这个问题,但没有任何效果。这包括设置 contentType: 'application/json; charset=utf-8'
、dataType: 'json'
和 data: JSON.stringify(send)
。我找不到更多关于此的论坛问题或文章,我发现的那些没有用。
感谢任何帮助。
您无法通过 $_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
}
所以这里有几个问题:
PUT 请求处理数据解析的方式与 POST 不同,这就是您格式化请求的方式。所以很高兴得到更多细节的回应。
你return一个json字符串但是不要把它转换成js对象。您需要像 $.parseJSON(...)
这样的对象才能正确地 return 。所以像:
success: function(responseData) {
var r = $.parseJSON(responseData);
console.log(r.response);
}
我有一个 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);
}
});
这应该 return 10
作为响应,但是输出为空。在 PHP 文件中,我还尝试将 id 写入文本文件,结果也是空的。这意味着我的 PHP 代码不是这里的问题,而是 JavaScript.
然而,当我将 AJAX url 更改为 myphpfile.php?id=10
时,响应是正确的并且 10
被记录到控制台。
我尝试了很多方法来解决这个问题,但没有任何效果。这包括设置 contentType: 'application/json; charset=utf-8'
、dataType: 'json'
和 data: JSON.stringify(send)
。我找不到更多关于此的论坛问题或文章,我发现的那些没有用。
感谢任何帮助。
您无法通过 $_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
}
所以这里有几个问题:
PUT 请求处理数据解析的方式与 POST 不同,这就是您格式化请求的方式。所以很高兴得到更多细节的回应。
你return一个json字符串但是不要把它转换成js对象。您需要像
$.parseJSON(...)
这样的对象才能正确地 return 。所以像:success: function(responseData) { var r = $.parseJSON(responseData); console.log(r.response); }