2010-10-03 145 views
3

我试图使用jQuery的AJAX方法如下DELETE请求移动响应

$.ajax(
{ 
    type: 'DELETE', 
    url: '/tagz', 
    data: {id: taskId}, 
    success: function(data) 
    { 
    console.log(data); 
    } 
}); 

做出删除请求而当我在Chrome中看到控制台,我发现在请求头一个使用GET请求而不是DELETE。并在Firefox的控制台中,我看到以下内容。

23:50:52:658: Network: DELETE http://test.goje87.com/tagz [HTTP/1.1 301 Moved Permanently 947ms] 
23:50:53:614: Network: GET http://test.goje87.com/tagz/ [HTTP/1.1 200 OK 400ms] 

在服务器端,我简单地维护下面的代码。

$reqMethod = $_SERVER['REQUEST_METHOD']; 

switch($reqMethod) 
{ 
    case 'GET': 
    Utils::printR('Will provide the resource.'); 
    selectObjects(); 
    break; 
    case 'POST': 
    Utils::printR('Will create a new record.'); 
    createObject(); 
    break; 
    case 'PUT': 
    Utils::printR('Will update the record.'); 
    break; 
    case 'DELETE': 
    Utils::printR('Will delete the record.'); 
    Utils::output($_SERVER); 
    break; 
} 

我没有看到请求进入case 'DELETE'。它正在进入case 'GET'

以下是我在服务器上用于清理URL的.htaccess文件。

RewriteEngine on 
RewriteRule ^(.*)$ index.php [L,QSA] 

请帮我在做删除请求。谢谢!

回答

2

我明白了。 :)

问题是与我通过$.ajax传递的网址('/tagz')。当我将其更改为/tagz/(在最后添加了另一个正斜杠)时,它在Chrome和Firefox中开始正常工作。

谢谢你们。

1

Chrome浏览器显然不支持DELETE方法。

+0

DELETE和PUT是有效的HTTP请求方法,请参见第9.6和9.7节:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html – PatrikAkerstrand 2010-10-03 18:48:55

+0

没有删除或放入jQuery.ajax( ) – 2010-10-03 18:51:25

+1

够公平的。似乎我不能删除倒票,除非答案被编辑? – PatrikAkerstrand 2010-10-03 19:05:03

0

它看起来像Web服务器不允许使用DELETE方法。你为什么不对所有的请求使用POST方法,而是提供一个变量“action”来包含要执行的动作?

+0

嘿斯拉夫,谢谢你的想法:)但我需要使用DELETE请求,因为我正在实施REST服务。我不确定问题是否出现在浏览器,服务器或.htaccess文件中。您能否告诉我任何可以将问题缩小到服务器的步骤? – Goje87 2010-10-04 17:56:21

+0

您应该在没有“安全”功能的本地服务器(locahost)上尝试此操作:使用chrome或mozilla,因为这2个机会允许jQuery使用PUT和DELETE的机会最多。然后输出你的$ _SERVER ['REQUEST_METHOD'];在一个PHP脚本。这应该是初级的。 – Slavic 2010-10-04 18:22:54