2008-11-25 57 views
4

我正在测试在asp.net mvc站点和WCF 3.5服务之间交换休息消息的基础知识。 该服务使用在codeplex上找到的WCF REST入门工具包中找到的模板构建。 我想用jquery交换json消息。 REST Singleton服务工作正常,它还提供了在uri结尾添加帮助参数ad的所有可能调用示例。 我到达使用内置的jquery $ .getJSON执行GET请求。 我在做PUT(用于更新值)和POST时遇到问题。Jquery与WCF 3.5的休息通信

$.ajax({ 
    type: "PUT", 
    dataType: "json", 
    url: "http://localhost:1045/Service.svc/?format=json", 
    data: '{"Value":testvalue}' 
}); 

这是最好的方法是什么?是否可以不使用Ajax女士,绕过它是否正确?

回答

4

“PUT” 和 “DELETE” 不被所有浏览器根据jQuery的

请求的类型,使( “POST” 或 “GET”)的支持,默认是 “GET”。注意:其他 HTTP请求方法,例如PUT和 DELETE,也可以在这里使用,但是 它们并不全部支持所有的 浏览器。

http://docs.jquery.com/Ajax/jQuery.ajax#options

我真的不明白你的问题虽然。你在做一个PUT和一个POST或只是一个POST有问题吗? GET工作正常吗?

我注意到的一个错误是您的数据,请注意我添加了它而没有引号。

$.ajax({ 
    type: "PUT", 
    dataType: "json", 
    url: "http://localhost:1045/Service.svc/?format=json", 
    data: { Value: "testvalue" } 
}); 
+0

嗨,尼克,谢谢你纠正这个例子。 为了澄清我的POST和PUT也使用正确的代码这两个方法返回一个ParseError ... – Ronnie 2008-11-25 14:52:35

5

另外,还要确保你有你的的contentType在你的Ajax调用正确设置。

contentType: "application/json"

jQuery的默认设置为

contentType: "application/x-www-form-urlencoded"

0

的PUT和DELETE动词并非所有的服务器上启用。您需要将这些动词放在X-HTTP-Method-Override标头中。在请求被处理之前,瓦尔从头部被取出并且取代正常的POST jsut。

jQuery jREST插件可以帮助你做到这一点。如果您使用的是WCF,则还需要实现RequestInterceptor(搜索XHttpMethodOverrideInterceptor以了解详细信息)。