我正在尝试使用带有PUT和DELETE方法的Jquery.ajax()并将一些数据与请求一起发送,但是在打印请求时它在php端是空的。
$.ajax({
url: 'ajax.php',
type: 'DELETE',
data: {some:'some',data:'data'},
}
在PHP中:
print_r($_REQUEST);
我得到一个空数组。 我不知道它是一个jquery或php的东西,或者只是我无法以这种方式发送数据。 我知道DELETE方法是在没有发送额外数据的情况下使用的,但是这里每个ajax请求都被发送到同一个脚本。
答案 0 :(得分:18)
要从PHP中的PUT请求检索HTTP请求正文的内容,您不能使用像$_POST
或$_GET
或$_REQUEST
这样的超全局,因为......
相反,您需要从STDIN
手动检索请求正文或使用php://input
流。
$_put = file_get_contents('php://input');
如果发生PUT或DELETE请求,仍会填充$_GET
超全局。如果需要访问这些值,可以按正常方式进行。我不熟悉jquery如何使用DELETE请求发送变量,因此如果未填充$_GET
,您可以尝试手动解析$_SERVER['QUERY_STRING']
变量或使用自定义“action”参数作为由@ShankarSangoli建议,以容纳过时的浏览器,这些浏览器不能使用javascript来发送DELETE请求。
答案 1 :(得分:4)
我认为所有浏览器都不支持DELETE
类型。我会传递一个addtional参数说action: delete
。试试这个。
$.ajax({
url: 'ajax.php',
type: 'POST',
data: { some:'some', data:'data', action: 'delete' },
}
答案 2 :(得分:3)
这可能是jQuery文档中所述的浏览器问题:
要求的类型(“POST”或“GET”),默认为“GET”。注意:此处也可以使用其他HTTP请求方法,例如PUT和DELETE,但并非所有浏览器都支持它们。