我正在尝试学习如何使用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.当我调试我的服务时,我看到该请求.Amount也是0,所以我认为我在Ajax做错了服务电话,但我无法弄清楚是什么。所以我想知道我在这里做错了什么。
答案 0 :(得分:2)
首先应该确保API正常运行。
转到此处:http://localhost:1879/entry
在Web浏览器中,您应该看到显示的页面,其中包含有关服务的信息。如果您的URL不正确或ServiceStack配置错误。
假设URL正确,您需要做的就是将数据包装在JSON.Stringify()中。 当您发布帖子时,数据必须是JSON格式的JSON字符串。您当前正在发送JSON对象。
此外,您最有可能在$ .ajax调用中将localhost位从您的网址中删除,只需执行“输入”
答案 1 :(得分:1)
您无法使用JsonP发帖。如果您尝试进行跨域POST,则需要查看cors并确保为您要发布的服务启用了。
答案 2 :(得分:1)
我只使用了jsonp因为我读过并希望它可以解决我的问题。但根据你的解释,我不应该需要它,所以我把我的代码改为:
var request = { };
request.Amount = 32;
$.ajax({ type: 'POST',
contentType: 'application/json; charset=utf-8',
url: "http://localhost:1879/json/reply/Entry",
dataType: 'json',
data: request,
success: function(result){
alert(result.Id);
},
error: function(xhr, ajaxOptions, thrownError){
alert("Failure!");
alert(xhr.status);
alert(thrownError);
}});
首先我没有错误部分进行此调用,没有任何事情发生,没有警报,没有错误,没有。所以我认为错误被消耗而不是被显示,所以我添加了错误回调,我的假设似乎是正确的。现在我收到3个警报,最后2个警报显示“400”和“错误请求”。
我搜索了这些错误并尝试过,但我找不到解决问题的可能解决办法。我在localhost部分尝试了2个url:/ json / reply / Entry和/ entry但两个都没有用。那么我做错了什么?