2010-10-03 147 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