2010-07-20 171 views
3

是否有可能使用自定义HTTP VERB,如MERGE,与jQuery.ajax()?我正在与OData API进行交互,在将更新发布到记录时需要使用MERGE动词。自定义HTTP动词与jQuery.ajax()

我遇到的问题是,当我在ajax()请求中使用“MERGE”时,它不会将数据发送到服务器。它只是发送一个没有数据的MERGE请求,所以OData服务拒绝它。

当我将请求更改为PUT时,OData服务会发回500错误。

我的选择基本上是要弄清楚如何获得“MERGE”调用与请求一起发送数据,执行DELETE后跟POST(删除并在每次更新时重新创建记录),或者找出如何修改OData服务以接受更新的PUT。

让我知道你是否有任何想法如何使jQuery.ajax()发送带有MERGE请求的数据。

感谢,

戴夫

+0

似乎非常难找到这些信息。我会说试试。如果它适用于主流浏览器,那很好;否则,您必须找到解决方法。有可能浏览器未知的动词被阻止。 – 2010-07-20 19:12:18

+0

相关:http://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers – 2010-07-20 19:13:06

+0

我在Chrome中尝试过,并发送一个适当的MERGE动词,但它不包含请求有效载荷,这是一个重要部分。我将在下面的Alex的帖子中尝试一下隧道方法。谢谢你的帮助! – 2010-07-21 03:43:32

回答

4

OData支持隧道编排MERGE through POST - 当然这通过JQuery支持 - 通过添加X-HTTP-Method标头。

请参阅本thread更多

亚历

OData的项目经理微软

+0

谢谢!这正是我所期待的。 – 2010-07-21 03:42:07

6

这不是jQuery的处理自定义HTTP动词能力的问题,这依赖于浏览器

+3

雅各布的正确,这不是jQuery阻止你,而是浏览器的XmlHttpRequest的实现。例如,IE不支持'PUT'。 – 2010-07-20 19:12:26

1

通过this question发现,here是一篇看起来很有趣的博客文章。

答案 - 至少在2008年 - 如果我正确读取:

  • IE浏览器似乎不支持它(至少到第7版)

  • Firefox支持它

  • 歌剧把所有未知变成了GET请求

我认为你必须尝试一下。