【问题标题】:getJSON with ServiceStack?getJSON 与 ServiceStack?
【发布时间】:2012-07-17 14:00:52
【问题描述】:

服务器端:

[RestService("/x")]
public class XFilter
{
    public long[] CountryIds { get; set; }
}

public class XService : RestServiceBase<XFilter>
{
    private const int PageCount = 20;

    public override object OnGet(XFilter request)
    {
        Debugger.Break(); // request is always default at this point  !!
        return a;
    }
}

客户端:

<script type="text/javascript">

 var requestData= "{CountryIds:[1,2]}";
$.getJSON("/api/x", requestData, function (b) {

});

一定很简单,但我无法使用这种方法在服务器端获取 XFilter。

【问题讨论】:

    标签: json rest servicestack


    【解决方案1】:

    这是无效的 JSON:

    var requestData= "{CountryIds:[1,2]}";
    

    所有字符串都必须用引号引起来,例如:

    var requestData= '{"CountryIds":[1,2]}';
    var requestData = JSON.stringify({CountryIds:[1,2]}); //same as above
    

    这将是您通过 $.ajax POST 发送的内容,您可能会考虑这样做,因为在 GET 请求中处理复杂类型没有约定,因为它必须将其序列化为 queryString。

    如果您想将复杂类型作为 queryString 发送,您需要自己构建 URL。 ServiceStack 使用其JSV Format 处理 GET 请求中的复杂类型(这只是带有 CSV 转义的 JSON,也就是不带引号的 JSON)。

    所以你的请求现在是:

    var requestData = "[1,2]";
    $.getJSON("/api/x?CountryIds=" + requestData, function (b) {
    });
    

    Re-Cap:如果您想发送 JSON,您需要通过 ajax POST 发送。

    【讨论】:

    • 没有。我已经添加了响应。请检查一下。在 javascript 中必须使用不带引号的 IT。
    【解决方案2】:
    var requestData= "{CountryIds:[1,2]}";
    

    必须

    var requestData= {CountryIds:[1,2]};
    

    但是getJSON还是有问题。它不适用于数组?

    Send list/array as parameter with jQuery getJson 是它的解决方案:)

    添加这个:

     $.ajaxSetup({
        traditional: true
    });
    

    【讨论】:

      猜你喜欢
      • 2012-07-04
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 2019-02-17
      • 2014-02-21
      • 1970-01-01
      相关资源
      最近更新 更多