2011-02-05 92 views
5

我正在嘗試向REST式Web服務發出PUT請求,但是,似乎jQuery 1.5確實響應了「類型」設置中的任何更改。無論「類型」中的值如何,該請求都將作爲GET發送。在jQuery 1.4中,這不是問題。jQuery 1.5僅在ajax方法中發送GET請求

這裏是我的代碼:

$.ajax({ 
    type: "PUT", 
    url: "https://api.somesite.com/v1.0/people/" + individualID + "/", 
    dataType: "jsonp", 
    data: $("#editProfile").serializeArray(), 
    cache: "false", 
    success: function(data,textStatus,jqXHR) { 
     $.modal.close(); 
    }, 
    error: function(jqXHR,textStatus,errorThrown) { 
     alert("Error!"); 
    } 
}); 
+1

您實際上並沒有提出一個問題,而是提出了一個錯誤報告。 – Phrogz 2011-02-05 19:33:52

+0

你使用哪些瀏覽器? – 2011-02-05 19:34:21

回答

6

據我所知,你不能通過PUT發出JSONP請求。由於JSONP通過注入指向遠程域的<script>元素工作,該請求將始終是GET請求。

如果您絕對必須向遠程域發出PUT請求,則需要在本地域上使用服務器端代理,或者在不需要IE支持的情況下查看CORS。

0

jQuery.ajax() docs

請求的類型作出( 「POST」 或 「GET」),默認是 「GET」。注意:其他 HTTP請求方法,例如PUT和 DELETE,也可以在這裏使用,但是 它們並不全部支持所有的 瀏覽器。

也許有了一些額外的瀏覽器信息,我們可以找出是什麼導致了問題,但現在看來,jQuery不想保證功能,除了GET和POST。這是令人驚訝的,我找出=)

0

我一直在努力尋找類似的東西。我已經能夠在1.5之前成功發送PUT,但停止使用1.5。我知道在1.5中處理ajax的東西有一個很大的改變,所以我會接下來看看。 當它確實工作,它在Safari瀏覽器工作正常,Firefox Chrome &鉻。當它工作時,你將首先得到一個OPTIONS被髮送,並且在你的服務器端必須滿意地響應OPTIONS請求一個la CORS之前指出。這裏有一個測試代碼,可以在1.5之前爲我工作,所以它是可能的。另外,我無法使用Firefox來緩存OPTIONS響應客戶端。其他瀏覽器確實如此。

http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" 

var url = 'http://api.example.com/rest/action?key=123ABC&data={"value":55}'; 
$.ajax({ 
    type: "PUT", 
    url: url, 
    data: {}, 
    success: function(msg){ 
    alert("Data Saved: " + msg); 
    }, 
    error: function(msg){ 
    console.debug(msg); 
    } 
});