所以我有以下工作:
$.ajax({
type: 'POST',
url: 'user',
data: '{"FirstName":"John","LastName":"Doe"}',
contentType: "application/json",
dataType: 'json',
success: function (data) {
alert('success!' + data.Id);
}
});
然而这失败了(应该是等价的):
$.post('user', '{"FirstName":"John","LastName":"Doe"}');
知道什么是错的吗? $ .post是否与WCF休息不相容?
答案 0 :(得分:2)
不,两者根本不相同。查看FireBug,Fiddler,...并比较2个请求。在第二个示例中,您未设置contentType: "application/json"
请求标头。您没有设置它,因为$.post
方法不允许您这样做。
服务器不接受您的请求,因为您尝试POST到启用JSON的服务,它希望请求是JSON,当然客户端设置application/json
内容类型请求标头。您正在发布一些字符串,因为您没有通过内容类型标题指明此字符串表示的内容,服务器不知道如何处理它并删除请求。
这就是说您应该像第一个示例中那样使用$.ajax
来调用您的服务。实际上我建议你稍作修改,而不是:
data: '{"FirstName":"John","LastName":"Doe"}',
使用:
data: JSON.stringify({"FirstName":"John","LastName":"Doe"}),
这将确保如果明天您决定与Mr. Jon Doe
之外的其他人打交道,例如Mr. Jon O"Hara
,那么您的JSON仍然会被正确编码,这就是JSON.stringify
方法所做的。它本身内置于现代浏览器中,但如果您需要支持某些旧版浏览器,则可以包含json2.js脚本来启用它。