2014-10-06 85 views
0

你是如何去REST的行動的話發送到服務器,如果的JavaScript是從您的瀏覽器禁用如何從瀏覽器禁用JavaScript時發送PUT和DELETE?

以下是我發送RESTful動詞到服務器的簡單測試。它緊緊依靠ajax的type: 'GET', etc

jQuery的,

$(document).ready(function() { 

    $(".rest-get").click(function(){ 
     $.ajax({ 
      type: 'GET', 
      url: 'server.php', 
      dataType: "json", // data type of response 
      success: function(){ 
       // 
      } 
     }); 
     return false; 
    }); 

    $(".rest-post").click(function(){ 
     $.ajax({ 
      type: 'POST', 
      url: 'server.php', 
      dataType: "json", // data type of response 
      success: function(){ 
       // 
      } 
     }); 
     return false; 
    }); 

    $(".rest-put").click(function(){ 
     $.ajax({ 
      type: 'PUT', 
      url: 'server.php', 
      dataType: "json", // data type of response 
      success: function(){ 
       // 
      } 
     }); 
     return false; 
    }); 

    $(".rest-delete").click(function(){ 
     $.ajax({ 
      type: 'DELETE', 
      url: 'server.php', 
      dataType: "json", // data type of response 
      success: function(){ 
       // 
      } 
     }); 
     return false; 
    }); 

}); 

HTML,

<ul> 
    <li><a href="#" class="rest-get">Get</a></li> 
    <li><a href="#" class="rest-post">Post</a></li> 
    <li><a href="#" class="rest-put">Put</a></li> 
    <li><a href="#" class="rest-delete">Delete</a></li> 
</ul> 

PHP,

<?php echo $_SERVER['REQUEST_METHOD'];?> // you get PUT, DELETE, GET, or POST 

我知道我們可以從HTML的形式發送POST,

<form method="POST"> 
... 
</form> 

但對於PUTDELETE?如果沒有辦法從HTML表單發送它們,那麼當JavaScript從瀏覽器中消失時,您的web服務或API將失敗?

+1

你可以把任何你想要的方法放到窗體的方法中。如果JS被禁用,這將是您甚至可以嘗試在服務器上進行放置/刪除的唯一方式。 – 2014-10-06 15:41:57

+0

如果禁用JS,則無法使用AJAX。您只能使用普通鏈接和表單提交。您需要將REST客戶端放在服務器上。 – Barmar 2014-10-06 15:43:06

+0

謝謝。你的意思是我們可以做到這一點 - 「

'?? – laukok 2014-10-06 15:43:10

回答

2

你可以使用POST但除了發送如下:

PUT

<input type="hidden" name="_method" value="PUT"/> 

DELETE

<input type="hidden" name="_method" value="DELETE"/> 
+0

我以爲是這樣!謝謝。 – laukok 2014-10-06 15:47:55

+0

不支持,至少不是根據規格。無論如何,一些瀏覽器可能會支持,但它們可能不應該。http://programmers.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms – GordonM 2014-10-06 15:47:58

1

HTML表單只支持GET和POST由於與緩存種種原因,它是否是安全的,重複失敗的請求,等(PUT和DELETE的支持是在一個HTML 5草案,但由於這些原因而下降)。

這可能是可以通過的形式使用隱藏字段指定實際的方法來解決這些,然後查找在服務器上的那場。

<form method="post"> 
<input type="hidden" name="actualMethod" value="PUT" /> 
</form> 

在服務器上你必須沿着線的東西:

$formMethod = isset ($_POST ['actualMethod'])? $_POST ['actualMethod']: $_SERVER ['REQUEST_METHOD']; 

switch ($formMethod) { 
    case "PUT": 
     // ... 

當然還有很大的侷限性,使用這一招,但它應該足夠簡單的情況。

相關問題