使用jquery 1.7.1对WCF rest服务进行$.post调用

本文关键字:post 调用 服务 rest jquery WCF 使用 | 更新日期: 2023-09-27 18:19:58

所以我有以下工作:

$.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 rest不兼容吗?

使用jquery 1.7.1对WCF rest服务进行$.post调用

不,两者根本不等价。看萤火虫,小提琴手。。。并比较这两个请求。在第二个示例中,您没有设置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脚本来启用它。