2

我正在尝试学习如何使用 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 服务调用时做错了,但是我不知道是什么。所以我想知道我在这里做错了什么。

4

3 回答 3

2

该 Pluralsight 课程的作者在这里。希望我能帮助你。

您应该做的第一件事是确保 API 正常工作。

转到此:http://localhost:1879/entry 在您的网络浏览器中,您应该会看到显示的页面,其中包含有关服务的信息。如果你不知道你的 URL 错误或 ServiceStack 配置错误。

假设 URL 是正确的,您需要做的就是将数据包装在 JSON.Stringify() 中。当您发布帖子时,数据必须采用 JSON 格式作为 JSON 字符串。您当前正在发送一个 JSON 对象。

此外,很可能您可以在 $.ajax 调用中从您的 url 中删除 localhost 位,然后执行“entry”

于 2013-07-24T03:43:58.400 回答
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,但两者都不起作用。那么我做错了什么?

于 2013-06-07T16:26:16.760 回答
1

你不能用 JsonP 发帖。如果您尝试进行跨域 POST,则需要查看 cors 并确保为您要发布的服务启用了该功能。

将数据发布到 JsonP

于 2013-06-06T21:13:45.853 回答