【发布时间】:2013-06-03 01:14:12
【问题描述】:
我正在尝试学习如何使用 ServiceStack 编写 Web 服务并通过 JavaScript 中的 ajax 调用它。我通过观看复数视觉电影做到了这一点,我想我几乎想出了如何做到这一点,除了通过服务调用将数据作为参数传递。
我尝试用这个 ajax 调用来调用服务:
var request = { };
request.Amount = 32;
$.ajax({ type: 'POST',
contentType: 'application/jsonp; charset=utf-8',
url: "http://localhost:1879/entry",
dataType: 'jsonp',
data: {request: request},
success: function(result){
alert(result.Id);
}});
服务如下所示:
public class EntryService : Service
{
public object Post(Entry request)
{
return new EntryResponse() { Id = request.Amount };
}
}
[Route("/entry", "POST")]
public class Entry
{
public int Amount { get; set; }
}
public class EntryResponse
{
public int Id { get; set; }
}
我希望回调中的警报显示数字 32,但它显示数字 0。当我调试我的服务时,我看到 request.Amount 也是 0,所以我认为我在 Ajax 上做错了服务电话,但我不知道是什么。所以我想知道我在这里做错了什么。
【问题讨论】:
-
您是否将您的服务设置为与 jQuery 的 JSONP 兼容?你知道回调处理程序有一个特定的名称等。
-
尝试两件事:1)尝试将数据:{request:request}更改为data:request 2)如果您需要jsonp,请添加SetConfig(new EndpointHostConfig {AllowJsonpRequests = true});到您的 AppHost (github.com/ServiceStack/ServiceStack/wiki/Configuration-options)
-
(回复你删除的答案)也许你把事情弄得太复杂了?你想做的事情一点也不复杂。我会回到旧技术并尝试 asmx 或 page 方法。他们用 jQuery 来招待他们。顺便说一句,Web 服务不需要不同的端口。
-
stackoverflow.com/a/16335022/397817 可能有帮助,也可能没有帮助。
标签: c# javascript ajax json servicestack