PUT,DELETE从Jquery到PHP的数据

时间:2012-02-03 15:14:30

标签: php rest jquery

我正在尝试使用带有PUT和DELETE方法的Jquery.ajax()并将一些数据与请求一起发送,但是在打印请求时它在php端是空的。

$.ajax({
url: 'ajax.php',
type: 'DELETE',
data: {some:'some',data:'data'},
}

在PHP中:

print_r($_REQUEST);

我得到一个空数组。 我不知道它是一个jquery或php的东西,或者只是我无法以这种方式发送数据。 我知道DELETE方法是在没有发送额外数据的情况下使用的,但是这里每个ajax请求都被发送到同一个脚本。

3 个答案:

答案 0 :(得分:18)

要从PHP中的PUT请求检索HTTP请求正文的内容,您不能使用像$_POST$_GET$_REQUEST这样的超全局,因为......

PUT或DELETE请求数据不存在PHP超全局

相反,您需要从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,但并非所有浏览器都支持它们。

http://api.jquery.com/jQuery.ajax/